Does this algebraic datatype modeling look good to...
# codereview
u
Does this algebraic datatype modeling look good to you?
Copy code
sealed class PinCodeState {
    sealed class ModeUnlock : PinCodeState() {
        data class RequestPin(val currentPin: String, val isFirstAttempt: Boolean) : ModeUnlock()
        data class RequestFingerprint(val isFirstAttempt: Boolean) : ModeUnlock()
        object Ok : ModeUnlock()
    }

    sealed class ModeCreate : PinCodeState() {
        data class RequestPin(val currentPin: String, val isFirstAttempt: Boolean) : ModeCreate()
        data class RepeatPin(val currentPin: String, val pendingPin: String) : ModeCreate()
        object Ok : ModeCreate()
    }

    sealed class ModeRemove : PinCodeState() {
        data class RequestPin(val currentPin: String, val isFirstAttempt: Boolean) : ModeRemove()
        object Ok : ModeRemove()
    }

    sealed class ModeChange : PinCodeState() {
        data class RequestPin(val currentPin: String, val isFirstAttempt: Boolean) : ModeChange()
        data class RequestNewPin(val currentPin: String, val isFirstAttempt: Boolean) : ModeChange()
        data class RepeatPin(val currentPin: String, val pendingPin: String) : ModeChange()
        object Ok : ModeChange()
    }
}