use codec::Decode;
pub struct Null;
impl Null {
pub fn new() -> Self {
Self
}
}
impl codec::Input for Null {
fn read(&mut self, bytes: &mut [u8]) -> Result<(), codec::Error> {
bytes.fill(0);
Ok(())
}
fn remaining_len(&mut self) -> Result<Option<usize>, codec::Error> {
Ok(None)
}
}
pub trait DecodeInto {
fn decode_into<T: Decode>(&mut self) -> Result<T, codec::Error>;
}
impl<T: codec::Input> DecodeInto for T {
fn decode_into<U: Decode>(&mut self) -> Result<U, codec::Error> {
Decode::decode(self)
}
}
pub trait NewNull {
#[allow(dead_code)]
fn new_null() -> Self;
}
impl<T: Decode> NewNull for T {
fn new_null() -> Self {
Null::new().decode_into().expect("infallible for nullable values; qed")
}
}