Skip to content

Commit

Permalink
Added seconds and minutes decoders
Browse files Browse the repository at this point in the history
  • Loading branch information
sksamuel committed Sep 30, 2021
1 parent cad34b4 commit d02b0c3
Show file tree
Hide file tree
Showing 3 changed files with 60 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package com.sksamuel.hoplite.decoder

import com.sksamuel.hoplite.ConfigFailure
import com.sksamuel.hoplite.ConfigResult
import com.sksamuel.hoplite.DecoderContext
import com.sksamuel.hoplite.LongNode
import com.sksamuel.hoplite.Node
import com.sksamuel.hoplite.StringNode
import com.sksamuel.hoplite.ThrowableFailure
import com.sksamuel.hoplite.fp.Try
import com.sksamuel.hoplite.fp.invalid
import com.sksamuel.hoplite.fp.valid
import kotlin.reflect.KType

class MinutesDecoder : NonNullableLeafDecoder<Minutes> {

override fun supports(type: KType): Boolean = type.classifier == Minutes::class
override fun safeLeafDecode(
node: Node,
type: KType,
context: DecoderContext
): ConfigResult<Minutes> = when (node) {
is StringNode -> Try { Minutes(node.value.toLong()) }.toValidated { ThrowableFailure(it) }
is LongNode -> Minutes(node.value).valid()
else -> ConfigFailure.DecodeError(node, type).invalid()
}
}

data class Minutes(val value: Long)
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package com.sksamuel.hoplite.decoder

import com.sksamuel.hoplite.ConfigFailure
import com.sksamuel.hoplite.ConfigResult
import com.sksamuel.hoplite.DecoderContext
import com.sksamuel.hoplite.LongNode
import com.sksamuel.hoplite.Node
import com.sksamuel.hoplite.StringNode
import com.sksamuel.hoplite.ThrowableFailure
import com.sksamuel.hoplite.fp.Try
import com.sksamuel.hoplite.fp.invalid
import com.sksamuel.hoplite.fp.valid
import kotlin.reflect.KType

class SecondsDecoder : NonNullableLeafDecoder<Seconds> {

override fun supports(type: KType): Boolean = type.classifier == Seconds::class
override fun safeLeafDecode(
node: Node,
type: KType,
context: DecoderContext
): ConfigResult<Seconds> = when (node) {
is StringNode -> Try { Seconds(node.value.toLong()) }.toValidated { ThrowableFailure(it) }
is LongNode -> Seconds(node.value).valid()
else -> ConfigFailure.DecodeError(node, type).invalid()
}
}

data class Seconds(val value: Long)
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,8 @@ com.sksamuel.hoplite.decoder.IntRangeDecoder
com.sksamuel.hoplite.decoder.LongRangeDecoder
com.sksamuel.hoplite.decoder.CharRangeDecoder
com.sksamuel.hoplite.decoder.YearMonthDecoder
com.sksamuel.hoplite.decoder.MinutesDecoder
com.sksamuel.hoplite.decoder.SecondsDecoder
com.sksamuel.hoplite.decoder.InlineClassDecoder
com.sksamuel.hoplite.decoder.SealedClassDecoder
com.sksamuel.hoplite.decoder.DataClassDecoder

0 comments on commit d02b0c3

Please sign in to comment.