Advertisement
Guest User

Untitled

a guest
Mar 28th, 2017
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scala 1.85 KB | None | 0 0
  1. object HBaseRecordSerDe {
  2.  
  3.  
  4.   import shapeless.{::, HList, HNil}
  5.  
  6.  
  7.  
  8.  
  9.   implicit val hNilEncoder = instance[HNil](
  10.     r => Map(),
  11.     l => HNil
  12.   )
  13.  
  14.   implicit def hListSerDe[Key <: Symbol, H, T <: HList](
  15.                                           implicit
  16.                                           key: Witness.Aux[Key],
  17.                                           headSerDe: HBaseFieldShapelessSerDe[H],
  18.                                           tailSerDe: HBaseRecordShapelessSerDe[T]
  19.                                         ): HBaseRecordShapelessSerDe[FieldType[Key, H] :: T] = instance[FieldType[Key,H] :: T](
  20.     hList => {
  21.       Map(key.value.name -> headSerDe.serialize(hList.head)) ++ tailSerDe.serialize(hList.tail)
  22.     },
  23.     byteList => {
  24.       field[Key](headSerDe.deSerialize(byteList.head._2)) :: tailSerDe.deSerialize(byteList.tail)
  25.     }
  26.   )
  27.  
  28.   implicit def caseClassSerDe[TargetType, L <: HList](implicit genRepr: LabelledGeneric.Aux[TargetType, L], hListSerDe: HBaseRecordShapelessSerDe[L]): HBaseRecordShapelessSerDe[TargetType] = instance[TargetType](
  29.     hList => {
  30.       hListSerDe.serialize(genRepr.to(hList))
  31.     },
  32.     byteList => {
  33.       genRepr.from( hListSerDe.deSerialize(byteList))
  34.     }
  35.   )
  36.  
  37.  
  38.   def apply[RecordSerDeType](implicit serde: HBaseRecordShapelessSerDe[RecordSerDeType]): HBaseRecordShapelessSerDe[RecordSerDeType] = serde
  39.  
  40.   def instance[RecordSerDeType](serializeFunc: RecordSerDeType => Map[String, Array[Byte]], deserializeFunc: Map[String, Array[Byte]] => RecordSerDeType): HBaseRecordShapelessSerDe[RecordSerDeType] = {
  41.     new HBaseRecordShapelessSerDe[RecordSerDeType] {
  42.       override def serialize(value: RecordSerDeType): Map[String, Array[Byte]] = serializeFunc(value)
  43.  
  44.       override def deSerialize(value:Map[String, Array[Byte]]): RecordSerDeType = deserializeFunc(value)
  45.     }
  46.   }
  47.  
  48.  
  49. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement