use crate::error::DecodeError; mod decoder; mod impls; pub mod read; pub use self::decoder::Decoder; pub trait Decodable<'de>: Sized + BorrowDecodable<'de> { fn decode>(decoder: D) -> Result; } pub trait BorrowDecodable<'de>: Sized { fn borrow_decode>(decoder: D) -> Result; } impl<'de, T: Decodable<'de>> BorrowDecodable<'de> for T { fn borrow_decode>(decoder: D) -> Result { Decodable::decode(decoder) } } pub trait Decode<'de> { fn decode_u8(&mut self) -> Result; fn decode_u16(&mut self) -> Result; fn decode_u32(&mut self) -> Result; fn decode_u64(&mut self) -> Result; fn decode_u128(&mut self) -> Result; fn decode_usize(&mut self) -> Result; fn decode_i8(&mut self) -> Result; fn decode_i16(&mut self) -> Result; fn decode_i32(&mut self) -> Result; fn decode_i64(&mut self) -> Result; fn decode_i128(&mut self) -> Result; fn decode_isize(&mut self) -> Result; fn decode_f32(&mut self) -> Result; fn decode_f64(&mut self) -> Result; fn decode_array(&mut self) -> Result<[u8; N], DecodeError>; } pub trait BorrowDecode<'de>: Decode<'de> { fn decode_slice(&mut self, len: usize) -> Result<&'de [u8], DecodeError>; }