pub mod actions;
pub mod datatypes;
pub mod enums;
pub mod messages;
pub use actions::*;
pub use datatypes::*;
pub use enums::*;
pub use messages::*;
pub const SUBPROTOCOL: &str = "ocpp2.1";
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn send_message() {
let p = r#"{"id":123,"pending":0,"basetime":"2024-08-27T12:30:40Z","data":[{"t":0,"v":"230.4"},{"t":5,"v":"230.2"}]}"#;
assert!(
StationSend::decode(
"NotifyPeriodicEventStream",
r#"{"id":123,"pending":0,"data":[{"t":"2024-08-27T12:30:40Z","v":"230.4"}]}"#
)
.is_err()
);
let StationSend::NotifyPeriodicEventStream(s) =
StationSend::decode("NotifyPeriodicEventStream", p).unwrap();
assert_eq!(s.data.len(), 2);
assert!(Action::NotifyPeriodicEventStream.is_send());
assert!(!Action::BootNotification.is_send());
}
#[test]
fn new_21_actions_directions() {
assert_eq!(Action::BatterySwap.direction(), Direction::StationToCsms);
assert_eq!(Action::AFRRSignal.direction(), Direction::CsmsToStation);
assert_eq!(Action::DataTransfer.direction(), Direction::Both);
assert!(
StationCall::decode("VatNumberValidation", r#"{"vatNumber":"NL123","evseId":1}"#)
.is_ok()
);
}
#[test]
fn minimum_constraint() {
let Err(DecodeError::Invalid(v)) =
CsmsCall::decode("AdjustPeriodicEventStream", r#"{"id":-1,"params":{}}"#)
else {
panic!()
};
assert_eq!(v.kind, ocpp_core::ViolationKind::Property);
}
}
#[cfg(doctest)]
#[doc = include_str!("../README.md")]
pub struct ReadmeDoctests;