1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
//! OCPP 2.1 protocol types and OCPP-J framing.
//!
//! # CallResult typing
//!
//! CALLRESULT frames do not include an action name. Options:
//!
//! - [`pending::PendingCalls`] — in-process `messageId → Action` (sticky sessions)
//! - [`pending::PendingActionNames`] / [`pending::resolve_with_action_name`] — store only the
//! action string (Redis-friendly across load-balanced nodes)
//! - [`call_result::CallResultRaw::into_typed`] / [`call_result::deserialize_call_result`] —
//! when your app already knows `T`
//! - [`call_result::CallResultRaw::probe_candidates`] / [`pending::try_resolve_unique`] —
//! last resort when the expected type is unknown (**ambiguous** for empty/status-only JSON)
//!
//! See [`pending`] module docs for scaling shortcomings.