mod input;
mod transcode;
mod validator;
pub use input::{DecodeField, DecodeInput, DecodeScalar, DecodeValue};
pub use prost;
pub use validator::{PayloadError, Validator};
use harmos_domain::__private::decoding_add;
use harmos_domain::schema::Described;
use harmos_domain::{Message, MessageError};
pub fn encode<T: Message + Described>(value: &T, bytes: &mut Vec<u8>) -> Result<(), MessageError> {
transcode::encode(&T::DEFINITION, &value.encode_to_vec(), bytes)
}
pub fn decode<T: Message + Described>(input: DecodeInput<'_>) -> Result<T, MessageError> {
T::decode(&transcode::decode(&T::DEFINITION, input)?)
}
pub fn decoding_memory<T: Message + Described>(input: DecodeInput<'_>) -> Result<usize, MessageError> {
let postcard = transcode::decode(&T::DEFINITION, input)?;
decoding_add(postcard.capacity(), T::decoding_memory(&postcard)?)
}