@@ -6,11 +6,14 @@ import com.avsystem.commons.serialization.GenCodec.ReadFailure
6
6
import com .avsystem .commons .serialization .{GenCodec , GenKeyCodec , GenObjectCodec }
7
7
import com .typesafe .config .{Config , ConfigFactory , ConfigObject }
8
8
9
+ import java .time .{Period , Duration as JDuration }
9
10
import scala .concurrent .duration .*
10
11
11
12
trait HoconGenCodecs {
12
13
implicit def configCodec : GenCodec [Config ] = HoconGenCodecs .ConfigCodec
13
14
implicit def finiteDurationCodec : GenCodec [FiniteDuration ] = HoconGenCodecs .FiniteDurationCodec
15
+ implicit def jDurationCodec : GenCodec [JDuration ] = HoconGenCodecs .JavaDurationCodec
16
+ implicit def periodCodec : GenCodec [Period ] = HoconGenCodecs .PeriodCodec
14
17
implicit def sizeInBytesCodec : GenCodec [SizeInBytes ] = HoconGenCodecs .SizeInBytesCodec
15
18
implicit def classKeyCodec : GenKeyCodec [Class [? ]] = HoconGenCodecs .ClassKeyCodec
16
19
implicit def classCodec : GenCodec [Class [? ]] = HoconGenCodecs .ClassCodec
@@ -33,6 +36,16 @@ object HoconGenCodecs {
33
36
(output, value) => output.writeSimple().writeLong(value.toMillis),
34
37
)
35
38
39
+ implicit val JavaDurationCodec : GenCodec [JDuration ] = GenCodec .nullable(
40
+ input => input.readCustom(DurationMarker ).getOrElse(JDuration .ofMillis(input.readSimple().readLong())),
41
+ (output, value) => output.writeSimple().writeLong(value.toMillis),
42
+ )
43
+
44
+ implicit final val PeriodCodec : GenCodec [Period ] = GenCodec .nullable(
45
+ input => input.readCustom(PeriodMarker ).getOrElse(Period .parse(input.readSimple().readString())),
46
+ (output, value) => output.writeSimple().writeString(value.toString),
47
+ )
48
+
36
49
implicit final val SizeInBytesCodec : GenCodec [SizeInBytes ] = GenCodec .nonNull(
37
50
input => SizeInBytes (input.readCustom(SizeInBytesMarker ).getOrElse(input.readSimple().readLong())),
38
51
(output, value) => output.writeSimple().writeLong(value.bytes),
0 commit comments