Creates a stream decoder that first decodes until this decoder finishes and then decodes using the supplied decoder.
Creates a stream decoder that first decodes until this decoder finishes and then decodes using the supplied decoder.
Note: this should not be used to write recursive decoders (e.g., def ints: StreamDecoder[A] = once(int32) ++ ints
)
if each incremental decoding step can fail with InsufficientBits
. Otherwise, it decoding can get stuck in
an infinite loop, where the remaining bits are fed to the recursive call.
Returns a Pull[F, A, Option[Stream[F, BitVector]]]
given a Stream[F, BitVector]
.
Returns a Pull[F, A, Option[Stream[F, BitVector]]]
given a Stream[F, BitVector]
.
The result of the returned pull is the remainder of the input stream that was not used in decoding.
Returns a Stream[F, A]
given a Stream[F, BitVector]
.
Creates a stream decoder that, upon decoding an A
, applies it to the supplied function and decodes
the next part of the input with the returned decoder.
Creates a stream decoder that, upon decoding an A
, applies it to the supplied function and decodes
the next part of the input with the returned decoder. When that decoder finishes, the remainder of
the input is returned to the original decoder for further decoding.
Alias for StreamDecoder.isolate(bits)(this)
.
Maps the supplied function over each output of this decoder.
Converts this stream decoder to a Decoder[Vector[A]]
.
Converts this decoder to a Pipe[F, BitVector, A]
.
Converts this decoder to a Pipe[F, Byte, A]
.
(Since version 1.7.0) Use widenOpt instead
Supports binary decoding of a stream that emits elements as they are decoded.
The main purpose of using a
StreamDecoder
over anscodec.Decoder
is mixing decoding with processing. For example,scodec.codecs.vector(decoderA): Decoder[Vector[A]]
could be used to decode a bit stream but the decodedVector[A]
would not be emitted until the end of the bit stream. WithStreamDecoder.many(decoderA): StreamDecoder[A]
, each decodedA
value is emitted as soon as it is decoded.The
StreamDecoder
companion has various constructors -- most importantly,once
andmany
, that allow aDecoder[A]
to be lifted to aStreamDecoder[A]
.Given a
StreamDecoder[A]
, a bit stream can be decoded via thedecode
method or by calling a variant oftoPipe
.