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, CertificateSignedRequest,
9    CertificateSignedResponse, ChangeAvailabilityRequest, ChangeAvailabilityResponse,
10    ChangeConfigurationRequest, ChangeConfigurationResponse, ClearCacheRequest, ClearCacheResponse,
11    ClearChargingProfileRequest, ClearChargingProfileResponse, DataTransferRequest,
12    DataTransferResponse, DeleteCertificateRequest, DeleteCertificateResponse,
13    DiagnosticsStatusNotificationRequest, DiagnosticsStatusNotificationResponse,
14    ExtendedTriggerMessageRequest, ExtendedTriggerMessageResponse,
15    FirmwareStatusNotificationRequest, FirmwareStatusNotificationResponse,
16    GetCompositeScheduleRequest, GetCompositeScheduleResponse, GetConfigurationRequest,
17    GetConfigurationResponse, GetDiagnosticsRequest, GetDiagnosticsResponse,
18    GetInstalledCertificateIdsRequest, GetInstalledCertificateIdsResponse,
19    GetLocalListVersionRequest, GetLocalListVersionResponse, GetLogRequest, GetLogResponse,
20    HeartbeatRequest, HeartbeatResponse, InstallCertificateRequest, InstallCertificateResponse,
21    LogStatusNotificationRequest, LogStatusNotificationResponse, MeterValuesRequest,
22    MeterValuesResponse, RemoteStartTransactionRequest, RemoteStartTransactionResponse,
23    RemoteStopTransactionRequest, RemoteStopTransactionResponse, ReserveNowRequest,
24    ReserveNowResponse, ResetRequest, ResetResponse, SecurityEventNotificationRequest,
25    SecurityEventNotificationResponse, SendLocalListRequest, SendLocalListResponse,
26    SetChargingProfileRequest, SetChargingProfileResponse, SignCertificateRequest,
27    SignCertificateResponse, SignedFirmwareStatusNotificationRequest,
28    SignedFirmwareStatusNotificationResponse, SignedUpdateFirmwareRequest,
29    SignedUpdateFirmwareResponse, StartTransactionRequest, StartTransactionResponse,
30    StatusNotificationRequest, StatusNotificationResponse, StopTransactionRequest,
31    StopTransactionResponse, TriggerMessageRequest, TriggerMessageResponse, UnlockConnectorRequest,
32    UnlockConnectorResponse, UpdateFirmwareRequest, UpdateFirmwareResponse,
33};
34
35/// Declares one OCPP 1.6 action: a zero-sized marker type implementing [`Action`], plus
36/// `send_x`/`on_x`/`wait_for_x` convenience methods on [`OCPP1_6Client`] that just call the
37/// generic `Client::call`/`Client::on`/`Client::wait_for` for it. Adding a new action is one
38/// macro invocation instead of three hand-written method bodies.
39macro_rules! ocpp_1_6_action {
40    ($name:ident, $req:ty, $res:ty, $action:literal, $send:ident, $on:ident, $wait_for:ident) => {
41        #[doc = concat!("Marker type for the `", $action, "` action.")]
42        pub struct $name;
43
44        impl Action for $name {
45            const NAME: &'static str = $action;
46            type Request = $req;
47            type Response = $res;
48        }
49
50        impl OCPP1_6Client {
51            pub async fn $send(&self, request: $req) -> Result<$res, ClientError<OCPP1_6Error>> {
52                self.call::<$name>(request).await
53            }
54
55            pub async fn $on<F, FF>(&self, callback: F)
56            where
57                F: FnMut($req, Self) -> FF + Send + Sync + 'static,
58                FF: Future<Output = Result<$res, OCPP1_6Error>> + Send,
59            {
60                self.on::<$name, F, FF>(callback).await
61            }
62
63            #[cfg(feature = "test")]
64            pub async fn $wait_for<F, FF>(
65                &self,
66                callback: F,
67            ) -> Result<$req, ClientError<OCPP1_6Error>>
68            where
69                F: FnMut($req, Self) -> FF + Send + Sync + 'static,
70                FF: Future<Output = Result<$res, OCPP1_6Error>> + Send,
71            {
72                self.wait_for::<$name, F, FF>(callback).await
73            }
74        }
75    };
76}
77
78ocpp_1_6_action!(
79    Authorize,
80    AuthorizeRequest,
81    AuthorizeResponse,
82    "Authorize",
83    send_authorize,
84    on_authorize,
85    wait_for_authorize
86);
87ocpp_1_6_action!(
88    BootNotification,
89    BootNotificationRequest,
90    BootNotificationResponse,
91    "BootNotification",
92    send_boot_notification,
93    on_boot_notification,
94    wait_for_boot_notification
95);
96ocpp_1_6_action!(
97    CancelReservation,
98    CancelReservationRequest,
99    CancelReservationResponse,
100    "CancelReservation",
101    send_cancel_reservation,
102    on_cancel_reservation,
103    wait_for_cancel_reservation
104);
105ocpp_1_6_action!(
106    CertificateSigned,
107    CertificateSignedRequest,
108    CertificateSignedResponse,
109    "CertificateSigned",
110    send_certificate_signed,
111    on_certificate_signed,
112    wait_for_certificate_signed
113);
114ocpp_1_6_action!(
115    ChangeAvailability,
116    ChangeAvailabilityRequest,
117    ChangeAvailabilityResponse,
118    "ChangeAvailability",
119    send_change_availability,
120    on_change_availability,
121    wait_for_change_availability
122);
123ocpp_1_6_action!(
124    ChangeConfiguration,
125    ChangeConfigurationRequest,
126    ChangeConfigurationResponse,
127    "ChangeConfiguration",
128    send_change_configuration,
129    on_change_configuration,
130    wait_for_change_configuration
131);
132ocpp_1_6_action!(
133    ClearCache,
134    ClearCacheRequest,
135    ClearCacheResponse,
136    "ClearCache",
137    send_clear_cache,
138    on_clear_cache,
139    wait_for_clear_cache
140);
141ocpp_1_6_action!(
142    ClearChargingProfile,
143    ClearChargingProfileRequest,
144    ClearChargingProfileResponse,
145    "ClearChargingProfile",
146    send_clear_charging_profile,
147    on_clear_charging_profile,
148    wait_for_clear_charging_profile
149);
150ocpp_1_6_action!(
151    DataTransfer,
152    DataTransferRequest,
153    DataTransferResponse,
154    "DataTransfer",
155    send_data_transfer,
156    on_data_transfer,
157    wait_for_data_transfer
158);
159ocpp_1_6_action!(
160    DeleteCertificate,
161    DeleteCertificateRequest,
162    DeleteCertificateResponse,
163    "DeleteCertificate",
164    send_delete_certificate,
165    on_delete_certificate,
166    wait_for_delete_certificate
167);
168ocpp_1_6_action!(
169    DiagnosticsStatusNotification,
170    DiagnosticsStatusNotificationRequest,
171    DiagnosticsStatusNotificationResponse,
172    "DiagnosticsStatusNotification",
173    send_diagnostics_status_notification,
174    on_diagnostics_status_notification,
175    wait_for_diagnostics_status_notification
176);
177ocpp_1_6_action!(
178    ExtendedTriggerMessage,
179    ExtendedTriggerMessageRequest,
180    ExtendedTriggerMessageResponse,
181    "ExtendedTriggerMessage",
182    send_extended_trigger_message,
183    on_extended_trigger_message,
184    wait_for_extended_trigger_message
185);
186ocpp_1_6_action!(
187    FirmwareStatusNotification,
188    FirmwareStatusNotificationRequest,
189    FirmwareStatusNotificationResponse,
190    "FirmwareStatusNotification",
191    send_firmware_status_notification,
192    on_firmware_status_notification,
193    wait_for_firmware_status_notification
194);
195ocpp_1_6_action!(
196    GetCompositeSchedule,
197    GetCompositeScheduleRequest,
198    GetCompositeScheduleResponse,
199    "GetCompositeSchedule",
200    send_get_composite_schedule,
201    on_get_composite_schedule,
202    wait_for_get_composite_schedule
203);
204ocpp_1_6_action!(
205    GetConfiguration,
206    GetConfigurationRequest,
207    GetConfigurationResponse,
208    "GetConfiguration",
209    send_get_configuration,
210    on_get_configuration,
211    wait_for_get_configuration
212);
213ocpp_1_6_action!(
214    GetDiagnostics,
215    GetDiagnosticsRequest,
216    GetDiagnosticsResponse,
217    "GetDiagnostics",
218    send_get_diagnostics,
219    on_get_diagnostics,
220    wait_for_get_diagnostics
221);
222ocpp_1_6_action!(
223    GetInstalledCertificateIds,
224    GetInstalledCertificateIdsRequest,
225    GetInstalledCertificateIdsResponse,
226    "GetInstalledCertificateIds",
227    send_get_installed_certificate_ids,
228    on_get_installed_certificate_ids,
229    wait_for_get_installed_certificate_ids
230);
231ocpp_1_6_action!(
232    GetLocalListVersion,
233    GetLocalListVersionRequest,
234    GetLocalListVersionResponse,
235    "GetLocalListVersion",
236    send_get_local_list_version,
237    on_get_local_list_version,
238    wait_for_get_local_list_version
239);
240ocpp_1_6_action!(
241    GetLog,
242    GetLogRequest,
243    GetLogResponse,
244    "GetLog",
245    send_get_log,
246    on_get_log,
247    wait_for_get_log
248);
249ocpp_1_6_action!(
250    Heartbeat,
251    HeartbeatRequest,
252    HeartbeatResponse,
253    "Heartbeat",
254    send_heartbeat,
255    on_heartbeat,
256    wait_for_heartbeat
257);
258ocpp_1_6_action!(
259    InstallCertificate,
260    InstallCertificateRequest,
261    InstallCertificateResponse,
262    "InstallCertificate",
263    send_install_certificate,
264    on_install_certificate,
265    wait_for_install_certificate
266);
267ocpp_1_6_action!(
268    LogStatusNotification,
269    LogStatusNotificationRequest,
270    LogStatusNotificationResponse,
271    "LogStatusNotification",
272    send_log_status_notification,
273    on_log_status_notification,
274    wait_for_log_status_notification
275);
276ocpp_1_6_action!(
277    MeterValues,
278    MeterValuesRequest,
279    MeterValuesResponse,
280    "MeterValues",
281    send_meter_values,
282    on_meter_values,
283    wait_for_meter_values
284);
285ocpp_1_6_action!(
286    RemoteStartTransaction,
287    RemoteStartTransactionRequest,
288    RemoteStartTransactionResponse,
289    "RemoteStartTransaction",
290    send_remote_start_transaction,
291    on_remote_start_transaction,
292    wait_for_remote_start_transaction
293);
294ocpp_1_6_action!(
295    RemoteStopTransaction,
296    RemoteStopTransactionRequest,
297    RemoteStopTransactionResponse,
298    "RemoteStopTransaction",
299    send_remote_stop_transaction,
300    on_remote_stop_transaction,
301    wait_for_remote_stop_transaction
302);
303ocpp_1_6_action!(
304    ReserveNow,
305    ReserveNowRequest,
306    ReserveNowResponse,
307    "ReserveNow",
308    send_reserve_now,
309    on_reserve_now,
310    wait_for_reserve_now
311);
312ocpp_1_6_action!(
313    Reset,
314    ResetRequest,
315    ResetResponse,
316    "Reset",
317    send_reset,
318    on_reset,
319    wait_for_reset
320);
321ocpp_1_6_action!(
322    SecurityEventNotification,
323    SecurityEventNotificationRequest,
324    SecurityEventNotificationResponse,
325    "SecurityEventNotification",
326    send_security_event_notification,
327    on_security_event_notification,
328    wait_for_security_event_notification
329);
330ocpp_1_6_action!(
331    SendLocalList,
332    SendLocalListRequest,
333    SendLocalListResponse,
334    "SendLocalList",
335    send_send_local_list,
336    on_send_local_list,
337    wait_for_send_local_list
338);
339ocpp_1_6_action!(
340    SetChargingProfile,
341    SetChargingProfileRequest,
342    SetChargingProfileResponse,
343    "SetChargingProfile",
344    send_set_charging_profile,
345    on_set_charging_profile,
346    wait_for_set_charging_profile
347);
348ocpp_1_6_action!(
349    SignCertificate,
350    SignCertificateRequest,
351    SignCertificateResponse,
352    "SignCertificate",
353    send_sign_certificate,
354    on_sign_certificate,
355    wait_for_sign_certificate
356);
357ocpp_1_6_action!(
358    SignedFirmwareStatusNotification,
359    SignedFirmwareStatusNotificationRequest,
360    SignedFirmwareStatusNotificationResponse,
361    "SignedFirmwareStatusNotification",
362    send_signed_firmware_status_notification,
363    on_signed_firmware_status_notification,
364    wait_for_signed_firmware_status_notification
365);
366ocpp_1_6_action!(
367    SignedUpdateFirmware,
368    SignedUpdateFirmwareRequest,
369    SignedUpdateFirmwareResponse,
370    "SignedUpdateFirmware",
371    send_signed_update_firmware,
372    on_signed_update_firmware,
373    wait_for_signed_update_firmware
374);
375ocpp_1_6_action!(
376    StartTransaction,
377    StartTransactionRequest,
378    StartTransactionResponse,
379    "StartTransaction",
380    send_start_transaction,
381    on_start_transaction,
382    wait_for_start_transaction
383);
384ocpp_1_6_action!(
385    StatusNotification,
386    StatusNotificationRequest,
387    StatusNotificationResponse,
388    "StatusNotification",
389    send_status_notification,
390    on_status_notification,
391    wait_for_status_notification
392);
393ocpp_1_6_action!(
394    StopTransaction,
395    StopTransactionRequest,
396    StopTransactionResponse,
397    "StopTransaction",
398    send_stop_transaction,
399    on_stop_transaction,
400    wait_for_stop_transaction
401);
402ocpp_1_6_action!(
403    TriggerMessage,
404    TriggerMessageRequest,
405    TriggerMessageResponse,
406    "TriggerMessage",
407    send_trigger_message,
408    on_trigger_message,
409    wait_for_trigger_message
410);
411ocpp_1_6_action!(
412    UnlockConnector,
413    UnlockConnectorRequest,
414    UnlockConnectorResponse,
415    "UnlockConnector",
416    send_unlock_connector,
417    on_unlock_connector,
418    wait_for_unlock_connector
419);
420ocpp_1_6_action!(
421    UpdateFirmware,
422    UpdateFirmwareRequest,
423    UpdateFirmwareResponse,
424    "UpdateFirmware",
425    send_update_firmware,
426    on_update_firmware,
427    wait_for_update_firmware
428);