MiniDigger/Hangar

View on GitHub
models/src/main/scala/ore/db/impl/schema/package.scala

Summary

Maintainability
A
0 mins
Test Coverage
package ore.db.impl

import java.time.Instant

import ore.db.{DbRef, Model, ObjId, ObjInstant}

// Alias Slick's Tag type because we have our own Tag type
package object schema {

  def mkApply[A, Rest](restApply: Rest => A): ((Option[DbRef[A]], Option[Instant], Rest)) => Model[A] =
    t => Model(ObjId.unsafeFromOption(t._1), ObjInstant.unsafeFromOption(t._2), restApply(t._3))

  def mkUnapply[A, Rest](
      restUnapply: A => Option[Rest]
  ): Model[A] => Option[(Option[DbRef[A]], Option[Instant], Rest)] = model => {
    for {
      t <- Model.unapply(model)
      (id, time, inner) = t
      rest <- restUnapply(inner)
    } yield (id.unsafeToOption, time.unsafeToOption, rest)
  }
}