codetics_ocpp_core/
lib.rs1pub mod datetime;
11pub mod error;
12pub mod msgid;
13pub mod rpc;
14pub mod validate;
15pub mod version;
16
17pub use datetime::DateTime;
18pub use error::{ErrorCode, ErrorDialect, RpcError};
19pub use msgid::MessageIdGenerator;
20pub use rpc::{Frame, MessageTypeId};
21pub use validate::{Path, Validate, Violation, ViolationKind};
22pub use version::OcppVersion;
23
24pub trait Request: serde::Serialize + serde::de::DeserializeOwned + Validate {
28 const ACTION: &'static str;
30 type Response: serde::Serialize + serde::de::DeserializeOwned + Validate;
31}
32
33pub fn decode_payload<T>(raw: &str) -> Result<T, Violation>
36where
37 T: serde::de::DeserializeOwned + Validate,
38{
39 let value: T = serde_json::from_str(raw).map_err(Violation::from_serde)?;
40 value.validate(&Path::root())?;
41 Ok(value)
42}
43
44pub fn decode_value<T>(value: serde_json::Value) -> Result<T, Violation>
46where
47 T: serde::de::DeserializeOwned + Validate,
48{
49 let value: T = serde_json::from_value(value).map_err(Violation::from_serde)?;
50 value.validate(&Path::root())?;
51 Ok(value)
52}
53
54#[cfg(doctest)]
56#[doc = include_str!("../README.md")]
57pub struct ReadmeDoctests;