codetics-ocpp201 0.1.0

Codetics OCPP: OCPP 2.0.1 message types with validation and typed dispatch
Documentation
# codetics-ocpp201

Every OCPP 2.0.1 (Edition 4) message as plain Rust types. Type names are the specification datatype names
without their `Type` suffix (`ChargingProfileType` → `ChargingProfile`).

- `serde` mappings matching the message definitions; `customData` extensions are preserved;
- `Validate` implementations for length, range and cardinality constraints, with violations mapped to OCPP-J error codes;
- `Action` with message direction, and typed dispatch: `StationCall` (Charging Station → CSMS) and `CsmsCall` (CSMS → Charging Station).

```rust
use codetics_ocpp201::StationCall;

let p = r#"{"reason":"PowerUp","chargingStation":{"model":"SingleSocketCharger","vendorName":"VendorX"}}"#;
let StationCall::BootNotification(boot) = StationCall::decode("BootNotification", p).unwrap() else { unreachable!() };
assert_eq!(boot.charging_station.vendor_name, "VendorX");
```

## Part of Codetics OCPP

This crate belongs to [Codetics OCPP](https://codetics.fr), a complete OCPP 1.6J / 2.0.1 / 2.1
implementation in Rust written by **Kevin Vavelin** ([Codetics](https://codetics.fr)).
It can be used as is; contributions are welcome.

## License and credit

Licensed under the [Apache License, Version 2.0](LICENSE).

Copyright 2026 Kevin Vavelin, Codetics. Any redistribution of this crate or of a work derived
from it (including forks and products embedding it) must keep the copyright notice and include
the [NOTICE](NOTICE) file crediting Kevin Vavelin / Codetics as the origin of the work.