Skip to content

Instantly share code, notes, and snippets.

@joshcough
Last active August 29, 2015 14:19
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save joshcough/84ae7443fd9888927878 to your computer and use it in GitHub Desktop.
Save joshcough/84ae7443fd9888927878 to your computer and use it in GitHub Desktop.
Code:
import scodec._
import scodec.bits._
import codecs._
import scalaz._
import Scalaz._
object Messages {
sealed trait MessageType
case object Buy extends MessageType
case object Sell extends MessageType
case class Message(id:Int, clientName: String, mt: MessageType)
val messageTypeCodec : Codec[MessageType] = mappedEnum(uint8, Buy -> 1, Sell -> 2)
val messageCodec = (int32 :: ascii :: messageTypeCodec).as[Message]
}
Session:
scala> import Messages._
import Messages._
scala> Message(90,"c",Buy)
res1: Messages.Message = Message(90,c,Buy)
scala> messageCodec.encode(res1)
res2: scodec.Attempt[scodec.bits.BitVector] = Successful(BitVector(48 bits, 0x0000005a6301))
scala> res2.flatMap(messageCodec.decode)
res3: scodec.Attempt[scodec.DecodeResult[Messages.Message]] = Failure(cannot acquire 8 bits from a vector that contains 0 bits)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment