pub trait Decode {
type Decoder: Decoder<Output = Self> + Default;
// Provided method
fn decoder() -> Self::Decoder { ... }
}Expand description
A Bitcoin object which can be consensus-decoded using a push decoder.
To decode something, create a Self::Decoder and push byte slices into it with
Decoder::push_bytes, then call Decoder::end to get the result.
§Examples
use bitcoin_consensus_encoding::{decode_from_slice, Decode, Decoder, DecoderStatus, ArrayDecoder, UnexpectedEofError};
struct Foo([u8; 4]);
#[derive(Default)]
struct FooDecoder(ArrayDecoder<4>);
impl Decoder for FooDecoder {
type Output = Foo;
type Error = UnexpectedEofError;
fn push_bytes(&mut self, bytes: &mut &[u8]) -> Result<DecoderStatus, Self::Error> {
self.0.push_bytes(bytes)
}
fn end(self) -> Result<Self::Output, Self::Error> { self.0.end().map(Foo) }
fn read_limit(&self) -> usize { self.0.read_limit() }
}
impl Decode for Foo {
type Decoder = FooDecoder;
}
let foo: Foo = decode_from_slice(&[0xde, 0xad, 0xbe, 0xef]).unwrap();
assert_eq!(foo.0, [0xde, 0xad, 0xbe, 0xef]);Required Associated Types§
Provided Methods§
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".