CycloneTechnology/ChaMP

View on GitHub
champ-ipmi/src/main/scala/com/cyclone/ipmi/protocol/Oem.scala

Summary

Maintainability
A
0 mins
Test Coverage
package com.cyclone.ipmi.protocol

import akka.util.{ByteString, ByteStringBuilder}
import com.cyclone.ipmi.codec._

case class Oem(value: Int, payloadId1: Byte, payloadId2: Byte)

object Oem {
  implicit val codec: Codec[Oem] = new Codec[Oem] {

    def encode(a: Oem): ByteString = {
      import a._
      val b = new ByteStringBuilder

      b ++= value.toBin.take(3)
      b += 0
      b += payloadId1
      b += payloadId2

      b.result()
    }

    def decode(data: ByteString): Oem = {
      val is = data.iterator.asInputStream

      val value = (is.read(3) ++ ByteString(0.toByte)).as[Int]
      is.skip(1)

      val id1 = is.readByte
      val id2 = is.readByte

      Oem(value, id1, id2)
    }
  }
}