1#![doc = include_str!("../README.md")]
2#![warn(missing_docs)]
3#![cfg_attr(not(feature = "std"), no_std)]
4
5#[cfg(not(feature = "std"))]
6extern crate alloc;
7
8pub(crate) use internal::*;
9pub use {
10 compact::Numeric,
11 de::Deserializer,
12 error::{Error, Result},
13 io::{Reader, Writer},
14 ser::Serializer,
15 with::bytes,
16};
17
18pub mod compact;
19mod de;
20mod error;
21mod internal;
22pub mod io;
23mod ser;
24pub mod visitor;
25mod with;
26
27pub trait Codec: serde::Serialize + serde::de::DeserializeOwned {
29 fn encode(&self) -> anyhow::Result<Vec<u8>> {
31 encode(&self).map_err(Into::into)
32 }
33
34 fn decode(value: &[u8]) -> anyhow::Result<Self> {
36 decode(value).map_err(Into::into)
37 }
38}
39
40impl<T: serde::Serialize + serde::de::DeserializeOwned> Codec for T {}
41
42pub fn encode<T: serde::Serialize>(value: &T) -> Result<Vec<u8>> {
44 let mut serializer = Serializer::default();
45 value.serialize(&mut serializer)?;
46 Ok(serializer.output)
47}
48
49pub fn decode<'de, T: serde::Deserialize<'de>>(value: &'de [u8]) -> Result<T> {
51 let mut deserializer: Deserializer<'de> = Deserializer::new(value);
52 T::deserialize(&mut deserializer)
53}