mod error;
pub mod types;
#[cfg(test)]
mod tests;
pub use error::NodeInfoError;
use serde::Serialize;
pub use types::{LegacyNodeInfo, NodeInfo, NodeInfoOwned};
use error::Result;
use types::{NodeInfoInternal, NodeVersion};
pub fn serialize<T: Serialize>(value: NodeInfoInternal<T>) -> Result<String> {
serde_json::to_string(&value).map_err(NodeInfoError::from)
}
pub fn deserialize(value: &str) -> Result<NodeInfo> {
let node_info_version: NodeVersion = serde_json::from_str(value)?;
match node_info_version.version {
"2.0" | "2.1" => serde_json::from_str(value).map_err(NodeInfoError::from),
"1.0" | "1.1" => match serde_json::from_str::<LegacyNodeInfo>(value) {
Ok(legacy_info) => Ok(legacy_info.into()),
Err(err) => Err(NodeInfoError::from(err)),
},
_ => Err(NodeInfoError::UnsupportedVersion),
}
}
pub fn deserialize_owned(value: &str) -> Result<NodeInfoOwned> {
deserialize(value).map(|x| x.to_owned())
}