Skip to main content

ocpp_client/ocpp_1_6/
actions.rs

1use crate::action::Action;
2use crate::error::ClientError;
3use crate::ocpp_1_6::OCPP1_6Client;
4use crate::ocpp_1_6::error::OCPP1_6Error;
5use core::future::Future;
6use ocpp_types::v16::{
7    AuthorizeRequest, AuthorizeResponse, BootNotificationRequest, BootNotificationResponse,
8    CancelReservationRequest, CancelReservationResponse, ChangeAvailabilityRequest,
9    ChangeAvailabilityResponse, ChangeConfigurationRequest, ChangeConfigurationResponse,
10    ClearCacheRequest, ClearCacheResponse, ClearChargingProfileRequest,
11    ClearChargingProfileResponse, DataTransferRequest, DataTransferResponse,
12    DiagnosticsStatusNotificationRequest, DiagnosticsStatusNotificationResponse,
13    FirmwareStatusNotificationRequest, FirmwareStatusNotificationResponse,
14    GetCompositeScheduleRequest, GetCompositeScheduleResponse, GetConfigurationRequest,
15    GetConfigurationResponse, GetDiagnosticsRequest, GetDiagnosticsResponse,
16    GetLocalListVersionRequest, GetLocalListVersionResponse, HeartbeatRequest, HeartbeatResponse,
17    MeterValuesRequest, MeterValuesResponse, RemoteStartTransactionRequest,
18    RemoteStartTransactionResponse, RemoteStopTransactionRequest, RemoteStopTransactionResponse,
19    ReserveNowRequest, ReserveNowResponse, ResetRequest, ResetResponse, SendLocalListRequest,
20    SendLocalListResponse, SetChargingProfileRequest, SetChargingProfileResponse,
21    StartTransactionRequest, StartTransactionResponse, StatusNotificationRequest,
22    StatusNotificationResponse, StopTransactionRequest, StopTransactionResponse,
23    TriggerMessageRequest, TriggerMessageResponse, UnlockConnectorRequest, UnlockConnectorResponse,
24    UpdateFirmwareRequest, UpdateFirmwareResponse,
25};
26
27/// Declares one OCPP 1.6 action: a zero-sized marker type implementing [`Action`], plus
28/// `send_x`/`on_x`/`wait_for_x` convenience methods on [`OCPP1_6Client`] that just call the
29/// generic `Client::call`/`Client::on`/`Client::wait_for` for it. Adding a new action is one
30/// macro invocation instead of three hand-written method bodies.
31macro_rules! ocpp_1_6_action {
32    ($name:ident, $req:ty, $res:ty, $action:literal, $send:ident, $on:ident, $wait_for:ident) => {
33        #[doc = concat!("Marker type for the `", $action, "` action.")]
34        pub struct $name;
35
36        impl Action for $name {
37            const NAME: &'static str = $action;
38            type Request = $req;
39            type Response = $res;
40        }
41
42        impl OCPP1_6Client {
43            pub async fn $send(&self, request: $req) -> Result<$res, ClientError<OCPP1_6Error>> {
44                self.call::<$name>(request).await
45            }
46
47            pub async fn $on<F, FF>(&self, callback: F)
48            where
49                F: FnMut($req, Self) -> FF + Send + Sync + 'static,
50                FF: Future<Output = Result<$res, OCPP1_6Error>> + Send,
51            {
52                self.on::<$name, F, FF>(callback).await
53            }
54
55            #[cfg(feature = "test")]
56            pub async fn $wait_for<F, FF>(
57                &self,
58                callback: F,
59            ) -> Result<$req, ClientError<OCPP1_6Error>>
60            where
61                F: FnMut($req, Self) -> FF + Send + Sync + 'static,
62                FF: Future<Output = Result<$res, OCPP1_6Error>> + Send,
63            {
64                self.wait_for::<$name, F, FF>(callback).await
65            }
66        }
67    };
68}
69
70ocpp_1_6_action!(
71    Authorize,
72    AuthorizeRequest,
73    AuthorizeResponse,
74    "Authorize",
75    send_authorize,
76    on_authorize,
77    wait_for_authorize
78);
79ocpp_1_6_action!(
80    BootNotification,
81    BootNotificationRequest,
82    BootNotificationResponse,
83    "BootNotification",
84    send_boot_notification,
85    on_boot_notification,
86    wait_for_boot_notification
87);
88ocpp_1_6_action!(
89    CancelReservation,
90    CancelReservationRequest,
91    CancelReservationResponse,
92    "CancelReservation",
93    send_cancel_reservation,
94    on_cancel_reservation,
95    wait_for_cancel_reservation
96);
97ocpp_1_6_action!(
98    ChangeAvailability,
99    ChangeAvailabilityRequest,
100    ChangeAvailabilityResponse,
101    "ChangeAvailability",
102    send_change_availability,
103    on_change_availability,
104    wait_for_change_availability
105);
106ocpp_1_6_action!(
107    ChangeConfiguration,
108    ChangeConfigurationRequest,
109    ChangeConfigurationResponse,
110    "ChangeConfiguration",
111    send_change_configuration,
112    on_change_configuration,
113    wait_for_change_configuration
114);
115ocpp_1_6_action!(
116    ClearCache,
117    ClearCacheRequest,
118    ClearCacheResponse,
119    "ClearCache",
120    send_clear_cache,
121    on_clear_cache,
122    wait_for_clear_cache
123);
124ocpp_1_6_action!(
125    ClearChargingProfile,
126    ClearChargingProfileRequest,
127    ClearChargingProfileResponse,
128    "ClearChargingProfile",
129    send_clear_charging_profile,
130    on_clear_charging_profile,
131    wait_for_clear_charging_profile
132);
133ocpp_1_6_action!(
134    DataTransfer,
135    DataTransferRequest,
136    DataTransferResponse,
137    "DataTransfer",
138    send_data_transfer,
139    on_data_transfer,
140    wait_for_data_transfer
141);
142ocpp_1_6_action!(
143    DiagnosticsStatusNotification,
144    DiagnosticsStatusNotificationRequest,
145    DiagnosticsStatusNotificationResponse,
146    "DiagnosticsStatusNotification",
147    send_diagnostics_status_notification,
148    on_diagnostics_status_notification,
149    wait_for_diagnostics_status_notification
150);
151ocpp_1_6_action!(
152    FirmwareStatusNotification,
153    FirmwareStatusNotificationRequest,
154    FirmwareStatusNotificationResponse,
155    "FirmwareStatusNotification",
156    send_firmware_status_notification,
157    on_firmware_status_notification,
158    wait_for_firmware_status_notification
159);
160ocpp_1_6_action!(
161    GetCompositeSchedule,
162    GetCompositeScheduleRequest,
163    GetCompositeScheduleResponse,
164    "GetCompositeSchedule",
165    send_get_composite_schedule,
166    on_get_composite_schedule,
167    wait_for_get_composite_schedule
168);
169ocpp_1_6_action!(
170    GetConfiguration,
171    GetConfigurationRequest,
172    GetConfigurationResponse,
173    "GetConfiguration",
174    send_get_configuration,
175    on_get_configuration,
176    wait_for_get_configuration
177);
178ocpp_1_6_action!(
179    GetDiagnostics,
180    GetDiagnosticsRequest,
181    GetDiagnosticsResponse,
182    "GetDiagnostics",
183    send_get_diagnostics,
184    on_get_diagnostics,
185    wait_for_get_diagnostics
186);
187ocpp_1_6_action!(
188    GetLocalListVersion,
189    GetLocalListVersionRequest,
190    GetLocalListVersionResponse,
191    "GetLocalListVersion",
192    send_get_local_list_version,
193    on_get_local_list_version,
194    wait_for_get_local_list_version
195);
196ocpp_1_6_action!(
197    Heartbeat,
198    HeartbeatRequest,
199    HeartbeatResponse,
200    "Heartbeat",
201    send_heartbeat,
202    on_heartbeat,
203    wait_for_heartbeat
204);
205ocpp_1_6_action!(
206    MeterValues,
207    MeterValuesRequest,
208    MeterValuesResponse,
209    "MeterValues",
210    send_meter_values,
211    on_meter_values,
212    wait_for_meter_values
213);
214ocpp_1_6_action!(
215    RemoteStartTransaction,
216    RemoteStartTransactionRequest,
217    RemoteStartTransactionResponse,
218    "RemoteStartTransaction",
219    send_remote_start_transaction,
220    on_remote_start_transaction,
221    wait_for_remote_start_transaction
222);
223ocpp_1_6_action!(
224    RemoteStopTransaction,
225    RemoteStopTransactionRequest,
226    RemoteStopTransactionResponse,
227    "RemoteStopTransaction",
228    send_remote_stop_transaction,
229    on_remote_stop_transaction,
230    wait_for_remote_stop_transaction
231);
232ocpp_1_6_action!(
233    ReserveNow,
234    ReserveNowRequest,
235    ReserveNowResponse,
236    "ReserveNow",
237    send_reserve_now,
238    on_reserve_now,
239    wait_for_reserve_now
240);
241ocpp_1_6_action!(
242    Reset,
243    ResetRequest,
244    ResetResponse,
245    "Reset",
246    send_reset,
247    on_reset,
248    wait_for_reset
249);
250ocpp_1_6_action!(
251    SendLocalList,
252    SendLocalListRequest,
253    SendLocalListResponse,
254    "SendLocalList",
255    send_send_local_list,
256    on_send_local_list,
257    wait_for_send_local_list
258);
259ocpp_1_6_action!(
260    SetChargingProfile,
261    SetChargingProfileRequest,
262    SetChargingProfileResponse,
263    "SetChargingProfile",
264    send_set_charging_profile,
265    on_set_charging_profile,
266    wait_for_set_charging_profile
267);
268ocpp_1_6_action!(
269    StartTransaction,
270    StartTransactionRequest,
271    StartTransactionResponse,
272    "StartTransaction",
273    send_start_transaction,
274    on_start_transaction,
275    wait_for_start_transaction
276);
277ocpp_1_6_action!(
278    StatusNotification,
279    StatusNotificationRequest,
280    StatusNotificationResponse,
281    "StatusNotification",
282    send_status_notification,
283    on_status_notification,
284    wait_for_status_notification
285);
286ocpp_1_6_action!(
287    StopTransaction,
288    StopTransactionRequest,
289    StopTransactionResponse,
290    "StopTransaction",
291    send_stop_transaction,
292    on_stop_transaction,
293    wait_for_stop_transaction
294);
295ocpp_1_6_action!(
296    TriggerMessage,
297    TriggerMessageRequest,
298    TriggerMessageResponse,
299    "TriggerMessage",
300    send_trigger_message,
301    on_trigger_message,
302    wait_for_trigger_message
303);
304ocpp_1_6_action!(
305    UnlockConnector,
306    UnlockConnectorRequest,
307    UnlockConnectorResponse,
308    "UnlockConnector",
309    send_unlock_connector,
310    on_unlock_connector,
311    wait_for_unlock_connector
312);
313ocpp_1_6_action!(
314    UpdateFirmware,
315    UpdateFirmwareRequest,
316    UpdateFirmwareResponse,
317    "UpdateFirmware",
318    send_update_firmware,
319    on_update_firmware,
320    wait_for_update_firmware
321);