All Downloads are FREE. Search and download functionalities are using the official Maven repository.

scodec.codecs.ConditionalCodec.scala Maven / Gradle / Ivy

package scodec
package codecs

import scalaz.{\/-, -\/}
import scalaz.std.option.{none, some}
import scalaz.syntax.either._

import scodec.bits.BitVector

private[codecs] final class ConditionalCodec[A](included: Boolean, codec: Codec[A]) extends Codec[Option[A]] {

  override def encode(a: Option[A]) = {
    a.filter { _ => included }.fold(BitVector.empty.right[String]) { a => codec.encode(a) }
  }

  override def decode(buffer: BitVector) = {
    if (included)
      codec.decode(buffer).map { case (rest, result) => (rest, some(result)) }
    else
      \/-((buffer, none))
  }

  override def toString = s"conditional($included, $codec)"

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy