Skip to content

Instantly share code, notes, and snippets.

@xuwei-k
Created November 22, 2015 14:55
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save xuwei-k/a9c04a67bff2953a442e to your computer and use it in GitHub Desktop.
Save xuwei-k/a9c04a67bff2953a442e to your computer and use it in GitHub Desktop.
scalaVersion := "2.11.7"
libraryDependencies ++= (
("com.github.pocketberserker" %% "scodec-msgpack" % "0.3.0") ::
("com.github.xuwei-k" % "msgpack4z-api" % "0.2.0") ::
Nil
)
package msgpack4z
import java.math.BigInteger
import scodec.Attempt
import scodec.bits.{BitVector, ByteVector}
import scodec.msgpack.codecs.MessagePackCodec
import scodec.msgpack.{MNil, MessagePack, Serialize}
object ScodecPacker {
val codec = scodec.codecs.list(MessagePackCodec)
}
class ScodecPacker(var values: List[MessagePack]) extends MsgPacker{
override def packByte(a: Byte): Unit = {
values ::= Serialize.long.pack(a).require
}
override def packDouble(a: Double): Unit = {
values ::= Serialize.double.pack(a).require
}
def bitVector(): Attempt[BitVector] = {
ScodecPacker.codec.encode(values.reverse)
}
def byteArray(): Attempt[Array[Byte]] = {
bitVector().map(_.toByteArray)
}
def byteVector(): Attempt[ByteVector] = {
bitVector().map(_.toByteVector)
}
override def result(): Array[Byte] = {
byteArray().require
}
def packByteVector(a: ByteVector): Unit = {
values ::= Serialize.binary.pack(a).require
}
override def packBinary(a: Array[Byte]): Unit = {
packByteVector(ByteVector(a))
}
override def packNil(): Unit = {
values ::= MNil
}
override def packArrayHeader(a: Int): Unit = {
// TODO 無理っぽい
}
override def packFloat(a: Float): Unit = ???
override def writePayload(a: Array[Byte]): Unit = ???
override def packInt(a: Int): Unit = ???
override def mapEnd(): Unit = ???
override def packMapHeader(a: Int): Unit = ???
override def packShort(a: Short): Unit = ???
override def packBoolean(a: Boolean): Unit = ???
override def packBigInteger(a: BigInteger): Unit = ???
override def packLong(a: Long): Unit = ???
override def packExtTypeHeader(extType: Byte, payloadLen: Int): Unit = ???
override def arrayEnd(): Unit = ???
override def packString(a: String): Unit = ???
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment