use crate::{error::DecodeResult, reader::TdfReader, tag::TdfType, writer::TdfWriter};
pub trait Decodable: Sized {
fn decode(reader: &mut TdfReader) -> DecodeResult<Self>;
}
pub trait Encodable: Sized {
fn encode(&self, writer: &mut TdfWriter);
fn encode_bytes(&self) -> Vec<u8> {
let mut output = TdfWriter::default();
self.encode(&mut output);
output.into()
}
}
pub trait ValueType {
fn value_type() -> TdfType;
}
#[macro_export]
macro_rules! value_type {
($for:ty, $type:expr) => {
impl $crate::codec::ValueType for $for {
fn value_type() -> $crate::tag::TdfType {
$type
}
}
};
}