Created
November 22, 2015 14:55
-
-
Save xuwei-k/a9c04a67bff2953a442e to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
scalaVersion := "2.11.7" | |
libraryDependencies ++= ( | |
("com.github.pocketberserker" %% "scodec-msgpack" % "0.3.0") :: | |
("com.github.xuwei-k" % "msgpack4z-api" % "0.2.0") :: | |
Nil | |
) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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