Skip to content

use NonEmptySet from Arrow-kt #272

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Apr 6, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .idea/AndroidProjectSystem.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion .idea/kotlinc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 4 additions & 0 deletions .idea/runConfigurations.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 0 additions & 2 deletions .idea/vcs.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Binary file modified buildSrc/gradle/wrapper/gradle-wrapper.jar
Binary file not shown.
6 changes: 4 additions & 2 deletions core/src/main/java/com/hoc/flowmvi/core/EitherNes.kt
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
package com.hoc.flowmvi.core

import arrow.core.Either
import arrow.core.NonEmptySet
import arrow.core.left
import arrow.core.nonEmptySetOf
import arrow.core.right
import com.hoc.flowmvi.core.NonEmptySet.Companion.toNonEmptySetOrNull
import arrow.core.toNonEmptySetOrNull
import kotlin.contracts.ExperimentalContracts
import kotlin.contracts.InvocationKind
import kotlin.contracts.contract
Expand All @@ -17,7 +19,7 @@ typealias EitherNes<E, A> = Either<NonEmptySet<E>, A>
inline fun <A> A.rightNes(): EitherNes<Nothing, A> = this.right()

@Suppress("NOTHING_TO_INLINE")
inline fun <E> E.leftNes(): EitherNes<E, Nothing> = NonEmptySet.of(this).left()
inline fun <E> E.leftNes(): EitherNes<E, Nothing> = nonEmptySetOf(this).left()

@OptIn(ExperimentalContracts::class)
inline fun <E, A, B, C, Z> Either.Companion.zipOrAccumulateNonEmptySet(
Expand Down
70 changes: 0 additions & 70 deletions core/src/main/java/com/hoc/flowmvi/core/NonEmptySet.kt

This file was deleted.

156 changes: 0 additions & 156 deletions core/src/test/java/com/hoc/flowmvi/core/NonEmptySetTest.kt

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.hoc.flowmvi.data.mapper

import com.hoc.flowmvi.core.NonEmptySet
import arrow.core.nonEmptySetOf
import com.hoc.flowmvi.data.remote.ErrorResponse
import com.hoc.flowmvi.domain.model.UserError
import com.hoc.flowmvi.domain.model.UserValidationError
Expand Down Expand Up @@ -55,8 +55,8 @@ class UserErrorMapperTest {
assertEquals(UserError.UserNotFound("1"), errorMapper(UserError.UserNotFound("1")))
assertEquals(UserError.InvalidId("1"), errorMapper(UserError.InvalidId("1")))
assertEquals(
UserError.ValidationFailed(NonEmptySet.of(UserValidationError.INVALID_EMAIL_ADDRESS)),
errorMapper(UserError.ValidationFailed(NonEmptySet.of(UserValidationError.INVALID_EMAIL_ADDRESS))),
UserError.ValidationFailed(nonEmptySetOf(UserValidationError.INVALID_EMAIL_ADDRESS)),
errorMapper(UserError.ValidationFailed(nonEmptySetOf(UserValidationError.INVALID_EMAIL_ADDRESS))),
)
assertEquals(UserError.ServerError, errorMapper(UserError.ServerError))
assertEquals(UserError.Unexpected, errorMapper(UserError.Unexpected))
Expand Down
16 changes: 12 additions & 4 deletions domain/src/main/java/com/hoc/flowmvi/domain/model/UserError.kt
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
package com.hoc.flowmvi.domain.model

import com.hoc.flowmvi.core.NonEmptySet
import arrow.core.NonEmptySet

sealed class UserError : Throwable() {
object NetworkError : UserError()
data object NetworkError : UserError() {
private fun readResolve(): Any = NetworkError
}

data class UserNotFound(
val id: String,
Expand All @@ -16,6 +18,12 @@ sealed class UserError : Throwable() {
data class ValidationFailed(
val errors: NonEmptySet<UserValidationError>,
) : UserError()
object ServerError : UserError()
object Unexpected : UserError()

data object ServerError : UserError() {
private fun readResolve(): Any = ServerError
}

data object Unexpected : UserError() {
private fun readResolve(): Any = Unexpected
}
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package com.hoc.flowmvi.domain.model

import arrow.core.NonEmptySet
import arrow.core.toNonEmptySetOrNull
import com.hoc.flowmvi.core.EitherNes
import com.hoc.flowmvi.core.NonEmptySet
import com.hoc.flowmvi.core.NonEmptySet.Companion.toNonEmptySetOrNull
import com.hoc.flowmvi.core.leftNes

enum class UserValidationError {
Expand All @@ -14,14 +14,6 @@ enum class UserValidationError {
val asLeftNes: EitherNes<UserValidationError, Nothing> = leftNes()

companion object {
/**
* Use this instead of [values()] for more performant.
* See [KT-48872](https://youtrack.jetbrains.com/issue/KT-48872)
*/
@JvmField
val VALUES: List<UserValidationError> = values().asList()

@JvmField
val VALUES_SET: NonEmptySet<UserValidationError> = VALUES.toNonEmptySetOrNull()!!
val VALUES_SET: NonEmptySet<UserValidationError> = UserValidationError.entries.toNonEmptySetOrNull()!!
}
}
Loading