pub mod datetime;
pub mod error;
pub mod msgid;
pub mod rpc;
pub mod validate;
pub mod version;
pub use datetime::DateTime;
pub use error::{ErrorCode, ErrorDialect, RpcError};
pub use msgid::MessageIdGenerator;
pub use rpc::{Frame, MessageTypeId};
pub use validate::{Path, Validate, Violation, ViolationKind};
pub use version::OcppVersion;
pub trait Request: serde::Serialize + serde::de::DeserializeOwned + Validate {
const ACTION: &'static str;
type Response: serde::Serialize + serde::de::DeserializeOwned + Validate;
}
pub fn decode_payload<T>(raw: &str) -> Result<T, Violation>
where
T: serde::de::DeserializeOwned + Validate,
{
let value: T = serde_json::from_str(raw).map_err(Violation::from_serde)?;
value.validate(&Path::root())?;
Ok(value)
}
pub fn decode_value<T>(value: serde_json::Value) -> Result<T, Violation>
where
T: serde::de::DeserializeOwned + Validate,
{
let value: T = serde_json::from_value(value).map_err(Violation::from_serde)?;
value.validate(&Path::root())?;
Ok(value)
}
#[cfg(doctest)]
#[doc = include_str!("../README.md")]
pub struct ReadmeDoctests;