@@ -6,11 +6,14 @@ import com.avsystem.commons.serialization.GenCodec.ReadFailure
66import com .avsystem .commons .serialization .{GenCodec , GenKeyCodec , GenObjectCodec }
77import com .typesafe .config .{Config , ConfigFactory , ConfigObject }
88
9+ import java .time .{Period , Duration as JDuration }
910import scala .concurrent .duration .*
1011
1112trait HoconGenCodecs {
1213 implicit def configCodec : GenCodec [Config ] = HoconGenCodecs .ConfigCodec
1314 implicit def finiteDurationCodec : GenCodec [FiniteDuration ] = HoconGenCodecs .FiniteDurationCodec
15+ implicit def jDurationCodec : GenCodec [JDuration ] = HoconGenCodecs .JavaDurationCodec
16+ implicit def periodCodec : GenCodec [Period ] = HoconGenCodecs .PeriodCodec
1417 implicit def sizeInBytesCodec : GenCodec [SizeInBytes ] = HoconGenCodecs .SizeInBytesCodec
1518 implicit def classKeyCodec : GenKeyCodec [Class [? ]] = HoconGenCodecs .ClassKeyCodec
1619 implicit def classCodec : GenCodec [Class [? ]] = HoconGenCodecs .ClassCodec
@@ -33,6 +36,16 @@ object HoconGenCodecs {
3336 (output, value) => output.writeSimple().writeLong(value.toMillis),
3437 )
3538
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+
3649 implicit final val SizeInBytesCodec : GenCodec [SizeInBytes ] = GenCodec .nonNull(
3750 input => SizeInBytes (input.readCustom(SizeInBytesMarker ).getOrElse(input.readSimple().readLong())),
3851 (output, value) => output.writeSimple().writeLong(value.bytes),
0 commit comments