hermit_toolkit_serialization/
lib.rs

1use serde::{de::DeserializeOwned, Serialize};
2
3use cosmwasm_std::StdResult;
4
5#[cfg(feature = "base64")]
6mod base64;
7#[cfg(feature = "bincode2")]
8mod bincode2;
9#[cfg(feature = "json")]
10mod json;
11
12#[cfg(all(feature = "bincode2", feature = "base64"))]
13pub use crate::base64::Base64Bincode2Of;
14#[cfg(all(feature = "json", feature = "base64"))]
15pub use crate::base64::Base64JsonOf;
16#[cfg(feature = "base64")]
17pub use crate::base64::{Base64, Base64Of};
18
19#[cfg(feature = "bincode2")]
20pub use crate::bincode2::Bincode2;
21#[cfg(feature = "json")]
22pub use crate::json::Json;
23
24/// This trait represents the ability to both serialize and deserialize using a specific format.
25///
26/// This is useful for types that want to have a default mode of serialization, but want
27/// to allow users to override it if they want to.
28///
29/// It is intentionally simple at the moment to keep the implementation easy.
30pub trait Serde {
31    fn serialize<T: Serialize>(obj: &T) -> StdResult<Vec<u8>>;
32    fn deserialize<T: DeserializeOwned>(data: &[u8]) -> StdResult<T>;
33}