in bijection-core/src/main/scala/com/twitter/bijection/Bufferable.scala [190:206]
implicit def option[T](implicit buf: Bufferable[T]): Bufferable[Option[T]] =
build[Option[T]] { (bb, opt) =>
opt match {
case None => reallocatingPut(bb) { _.put(0: Byte) }
case Some(v) => {
val nextBb = reallocatingPut(bb) { _.put(1: Byte) }
reallocatingPut(nextBb) { buf.put(_, opt.get) }
}
}
} { bb =>
val dup = bb.duplicate
val byte0 = 0: Byte
if (dup.get == byte0) Success((dup, None))
else {
buf.get(dup).map { tup => (tup._1, Some(tup._2)) }
}
}