dough-core and all of that

This commit is contained in:
2023-02-16 19:31:01 -08:00
parent 77f37f5660
commit d9b02c847f
19 changed files with 184 additions and 7 deletions

View File

@ -0,0 +1,5 @@
package gay.pizza.dough.core
import gay.pizza.dough.core.time.ClockProvider
expect val PlatformClock: ClockProvider

View File

@ -0,0 +1,5 @@
package gay.pizza.dough.core.time
interface ClockProvider {
fun now(): UnixTime
}

View File

@ -0,0 +1,11 @@
package gay.pizza.dough.core.time
import gay.pizza.dough.core.PlatformClock
class StaticClockProvider(private val value: UnixTime) : ClockProvider {
override fun now(): UnixTime = value
companion object {
fun snapshot(): StaticClockProvider = StaticClockProvider(PlatformClock.now())
}
}

View File

@ -0,0 +1,44 @@
package gay.pizza.dough.core.time
import kotlin.jvm.JvmInline
import kotlin.time.Duration
import kotlin.time.DurationUnit
import kotlin.time.toDuration
@JvmInline
value class UnixTime(val millisecondsSinceEpoch: Long) : Comparable<UnixTime> {
operator fun plus(time: UnixTime): UnixTime =
UnixTime(millisecondsSinceEpoch + time.millisecondsSinceEpoch)
operator fun minus(time: UnixTime): UnixTime =
UnixTime(millisecondsSinceEpoch - time.millisecondsSinceEpoch)
operator fun times(time: UnixTime): UnixTime =
UnixTime(millisecondsSinceEpoch * time.millisecondsSinceEpoch)
operator fun div(duration: Duration): UnixTime =
UnixTime(millisecondsSinceEpoch / duration.inWholeMilliseconds)
operator fun rem(time: UnixTime): UnixTime =
UnixTime(millisecondsSinceEpoch % time.millisecondsSinceEpoch)
operator fun plus(duration: Duration): UnixTime =
UnixTime(millisecondsSinceEpoch + duration.inWholeMilliseconds)
operator fun minus(duration: Duration): UnixTime =
UnixTime(millisecondsSinceEpoch - duration.inWholeMilliseconds)
operator fun times(duration: Duration): UnixTime =
UnixTime(millisecondsSinceEpoch * duration.inWholeMilliseconds)
operator fun div(time: UnixTime): UnixTime =
UnixTime(millisecondsSinceEpoch / time.millisecondsSinceEpoch)
operator fun rem(duration: Duration): UnixTime =
UnixTime(millisecondsSinceEpoch % duration.inWholeMilliseconds)
fun toDuration(): Duration = millisecondsSinceEpoch.toDuration(DurationUnit.MILLISECONDS)
override fun compareTo(other: UnixTime): Int =
millisecondsSinceEpoch.compareTo(other.millisecondsSinceEpoch)
}