Advertisement
Guest User

WithId

a guest
Aug 15th, 2018
123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scala 0.83 KB | None | 0 0
  1. sealed abstract class InternalIdentifiable {
  2.   self =>
  3.   type Identifier
  4.   def withId(identifier: Identifier): WithId[self.type] =
  5.     WithId[self.type](identifier, self)
  6. }
  7.  
  8. abstract class Identifiable[Identifier0] extends InternalIdentifiable {
  9.   type Identifier = Identifier0
  10. }
  11.  
  12. final case class WithId[A <: InternalIdentifiable](id: A#Identifier, model: A)
  13.  
  14. object Usage {
  15.   final case class MyModelId(id: String) extends AnyVal
  16.   final case class MyModel(payload: Int) extends Identifiable[MyModelId]
  17.  
  18.   val myModel: MyModel = MyModel(42)
  19.   val idOfSavedModel: MyModelId = saveNewToDB(myModel)
  20.   val retrievedModelWithId: WithId[MyModel] = retrieveFromDB(idOfSavedModel)
  21.  
  22.   def saveNewToDB(model: MyModel): MyModelId = MyModelId("idString")
  23.   def retrieveFromDB(id: MyModelId): WithId[MyModel] = MyModel(42).withId(id)
  24. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement