Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- sealed abstract class InternalIdentifiable {
- self =>
- type Identifier
- def withId(identifier: Identifier): WithId[self.type] =
- WithId[self.type](identifier, self)
- }
- abstract class Identifiable[Identifier0] extends InternalIdentifiable {
- type Identifier = Identifier0
- }
- final case class WithId[A <: InternalIdentifiable](id: A#Identifier, model: A)
- object Usage {
- final case class MyModelId(id: String) extends AnyVal
- final case class MyModel(payload: Int) extends Identifiable[MyModelId]
- val myModel: MyModel = MyModel(42)
- val idOfSavedModel: MyModelId = saveNewToDB(myModel)
- val retrievedModelWithId: WithId[MyModel] = retrieveFromDB(idOfSavedModel)
- def saveNewToDB(model: MyModel): MyModelId = MyModelId("idString")
- def retrieveFromDB(id: MyModelId): WithId[MyModel] = MyModel(42).withId(id)
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement