CycloneTechnology/ChaMP

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

Summary

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

import akka.util.ByteString
import com.cyclone.ipmi.codec.StringDecoder._
import com.cyclone.ipmi.codec._

/**
  * An FRU field type
  */
sealed trait FruFieldType {

  def decode(data: ByteString, treatAsEnglish: Boolean)(
    implicit languageCode: LanguageCode
  ): FruField
}

object FruFieldType {

  case object Binary extends FruFieldType {

    def decode(data: ByteString, treatAsEnglish: Boolean)(implicit languageCode: LanguageCode) =
      BinaryField(data)
  }

  case object Bcd extends FruFieldType {

    def decode(data: ByteString, treatAsEnglish: Boolean)(implicit languageCode: LanguageCode) =
      StringField(data.as(BcdDecoder))
  }

  case object SixBitAscii extends FruFieldType {

    def decode(data: ByteString, treatAsEnglish: Boolean)(implicit languageCode: LanguageCode) =
      StringField(SixBitAsciiDecoder.decode(data))
  }

  case object StandardString extends FruFieldType {

    def decode(data: ByteString, treatAsEnglish: Boolean)(
      implicit languageCode: LanguageCode
    ): StringField =
      if (languageCode.isEnglish || treatAsEnglish)
        StringField(data.as(StringDecoder.AsciiLatin))
      else
        StringField(data.as(StringDecoder.Unicode))
  }

}