All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.msgpack.template.EitherTemplate.scala Maven / Gradle / Ivy

The newest version!
package org.msgpack.template

import org.msgpack.unpacker.Unpacker
import org.msgpack.packer.Packer
import org.msgpack.MessageTypeException

/**
 *
 * User: takeshita
 * Create: 12/04/21 3:56
 */

class EitherTemplate[L,R](leftTemplate : Template[L],rightTemplate : Template[R]) extends AbstractTemplate[Either[L,R]] {

  def write(pk: Packer, v: Either[L, R], required: Boolean) {

    if(v == null){
      if(required){
        throw new MessageTypeException("Attempted to write null")
      }
      pk.writeNil()
      return
    }
    pk.writeArrayBegin(3)
    v match{
      case Left(v) => {
        pk.write(false)
        leftTemplate.write(pk,v,false)
        pk.writeNil()
      }
      case Right(v) => {
        pk.write(true)
        pk.writeNil()
        rightTemplate.write(pk,v,false)
      }
    }
    pk.writeArrayEnd()

  }

  def read(u: Unpacker, to: Either[L, R], required: Boolean): Either[L, R] = {
    if(!required && u.trySkipNil){
      return null.asInstanceOf[Either[L,R]]
    }
    u.readArrayBegin()
    val v = if(u.readBoolean()){
      u.readNil()
      Right(rightTemplate.read(u,null.asInstanceOf[R],false))
    }else{
      val l = Left(leftTemplate.read(u,null.asInstanceOf[L],false))
      u.readNil()
      l
    }
    u.readArrayEnd()
    v
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy