scala
trait BoopickleCodec[T] {
def pickle(obj: T): Pickle
def unpickle(pickle: Pickle): T
}
scala
import boopickle.Default._
case class Person(name: String, age: Int)
implicit val personCodec = new BoopickleCodec[Person] {
override def pickle(obj: Person): Pickle = {
val namePickle = implicitly[Pickler[String]].pickle(obj.name)
val agePickle = implicitly[Pickler[Int]].pickle(obj.age)
CompositePickler(namePickle, agePickle)
}
override def unpickle(pickle: Pickle): Person = {
val name = implicitly[Pickler[String]].unpickle(pickle)
val age = implicitly[Pickler[Int]].unpickle(pickle)
Person(name, age)
}
}
val pickleBytes = Pickle.intoBytes(person)
val unpickledPerson = Unpickle[Person].fromBytes(pickleBytes)