By default, many types use a String representation. You can override this behavior by mixing in specific numeric encoding traits into your protocol object. This is useful for performance or compatibility with systems expecting numeric timestamps or durations.
Available Mixins
Duration Mixins:
pl.iterators.kebs.instances.time.mixins.DurationNanosLong: Duration as nanosecondspl.iterators.kebs.instances.time.mixins.DurationMillisLong: Duration as millisecondspl.iterators.kebs.instances.time.mixins.DurationSecondsLong: Duration as secondspl.iterators.kebs.instances.time.mixins.DurationMinutesLong: Duration as minutes
Instant Mixins:
pl.iterators.kebs.instances.time.mixins.InstantEpochMilliLong: Instant as epoch millispl.iterators.kebs.instances.time.mixins.InstantEpochSecondLong: Instant as epoch seconds
Period Mixins:
pl.iterators.kebs.instances.time.mixins.PeriodDays: Period as days (Int)pl.iterators.kebs.instances.time.mixins.PeriodMonthsInt: Period as months (Int)pl.iterators.kebs.instances.time.mixins.PeriodYearsInt: Period as years (Int)
Example Usage
To configure a protocol where Instant is epoch millis and Duration is nanoseconds, while all other java.time types remain ISO Strings:
import pl.iterators.kebs.instances.TimeInstances
import pl.iterators.kebs.instances.time.mixins.{InstantEpochMilliLong, DurationNanosLong}
object MyProtocol extends KebsCirce with TimeInstances with InstantEpochMilliLong with DurationNanosLong
import pl.iterators.kebs.instances.TimeInstances
import pl.iterators.kebs.instances.time.mixins.{InstantEpochMilliLong, DurationNanosLong}
// Instant as epoch millis, Duration as nanos, everything else as ISO String
object MyProtocol extends KebsCirce with TimeInstances with InstantEpochMilliLong with DurationNanosLong