Skip to main content

ocpp_client/ocpp_2_0_1/
actions.rs

1use crate::action::Action;
2use crate::error::ClientError;
3use crate::ocpp_2_0_1::OCPP2_0_1Client;
4use crate::ocpp_2_0_1::error::OCPP2_0_1Error;
5use core::future::Future;
6use ocpp_types::v201::{
7    AuthorizeRequest, AuthorizeResponse, BootNotificationRequest, BootNotificationResponse,
8    CancelReservationRequest, CancelReservationResponse, CertificateSignedRequest,
9    CertificateSignedResponse, ChangeAvailabilityRequest, ChangeAvailabilityResponse,
10    ClearCacheRequest, ClearCacheResponse, ClearChargingProfileRequest,
11    ClearChargingProfileResponse, ClearDisplayMessageRequest, ClearDisplayMessageResponse,
12    ClearVariableMonitoringRequest, ClearVariableMonitoringResponse, ClearedChargingLimitRequest,
13    ClearedChargingLimitResponse, CostUpdatedRequest, CostUpdatedResponse,
14    CustomerInformationRequest, CustomerInformationResponse, DataTransferRequest,
15    DataTransferResponse, DeleteCertificateRequest, DeleteCertificateResponse,
16    FirmwareStatusNotificationRequest, FirmwareStatusNotificationResponse,
17    Get15118EVCertificateRequest, Get15118EVCertificateResponse, GetBaseReportRequest,
18    GetBaseReportResponse, GetCertificateStatusRequest, GetCertificateStatusResponse,
19    GetChargingProfilesRequest, GetChargingProfilesResponse, GetCompositeScheduleRequest,
20    GetCompositeScheduleResponse, GetDisplayMessagesRequest, GetDisplayMessagesResponse,
21    GetInstalledCertificateIdsRequest, GetInstalledCertificateIdsResponse,
22    GetLocalListVersionRequest, GetLocalListVersionResponse, GetLogRequest, GetLogResponse,
23    GetMonitoringReportRequest, GetMonitoringReportResponse, GetReportRequest, GetReportResponse,
24    GetTransactionStatusRequest, GetTransactionStatusResponse, GetVariablesRequest,
25    GetVariablesResponse, HeartbeatRequest, HeartbeatResponse, InstallCertificateRequest,
26    InstallCertificateResponse, LogStatusNotificationRequest, LogStatusNotificationResponse,
27    MeterValuesRequest, MeterValuesResponse, NotifyChargingLimitRequest,
28    NotifyChargingLimitResponse, NotifyCustomerInformationRequest,
29    NotifyCustomerInformationResponse, NotifyDisplayMessagesRequest, NotifyDisplayMessagesResponse,
30    NotifyEVChargingNeedsRequest, NotifyEVChargingNeedsResponse, NotifyEVChargingScheduleRequest,
31    NotifyEVChargingScheduleResponse, NotifyEventRequest, NotifyEventResponse,
32    NotifyMonitoringReportRequest, NotifyMonitoringReportResponse, NotifyReportRequest,
33    NotifyReportResponse, PublishFirmwareRequest, PublishFirmwareResponse,
34    PublishFirmwareStatusNotificationRequest, PublishFirmwareStatusNotificationResponse,
35    ReportChargingProfilesRequest, ReportChargingProfilesResponse, RequestStartTransactionRequest,
36    RequestStartTransactionResponse, RequestStopTransactionRequest, RequestStopTransactionResponse,
37    ReservationStatusUpdateRequest, ReservationStatusUpdateResponse, ReserveNowRequest,
38    ReserveNowResponse, ResetRequest, ResetResponse, SecurityEventNotificationRequest,
39    SecurityEventNotificationResponse, SendLocalListRequest, SendLocalListResponse,
40    SetChargingProfileRequest, SetChargingProfileResponse, SetDisplayMessageRequest,
41    SetDisplayMessageResponse, SetMonitoringBaseRequest, SetMonitoringBaseResponse,
42    SetMonitoringLevelRequest, SetMonitoringLevelResponse, SetNetworkProfileRequest,
43    SetNetworkProfileResponse, SetVariableMonitoringRequest, SetVariableMonitoringResponse,
44    SetVariablesRequest, SetVariablesResponse, SignCertificateRequest, SignCertificateResponse,
45    StatusNotificationRequest, StatusNotificationResponse, TransactionEventRequest,
46    TransactionEventResponse, TriggerMessageRequest, TriggerMessageResponse,
47    UnlockConnectorRequest, UnlockConnectorResponse, UnpublishFirmwareRequest,
48    UnpublishFirmwareResponse, UpdateFirmwareRequest, UpdateFirmwareResponse,
49};
50
51/// Same pattern as `ocpp_1_6_action!` (see `src/ocpp_1_6/actions.rs`): one marker type
52/// implementing [`Action`] plus `send_x`/`on_x`/`wait_for_x` convenience methods on
53/// [`OCPP2_0_1Client`], generated from one macro line per action.
54macro_rules! ocpp_2_0_1_action {
55    ($name:ident, $req:ty, $res:ty, $action:literal, $send:ident, $on:ident, $wait_for:ident) => {
56        #[doc = concat!("Marker type for the `", $action, "` action.")]
57        pub struct $name;
58
59        impl Action for $name {
60            const NAME: &'static str = $action;
61            type Request = $req;
62            type Response = $res;
63        }
64
65        impl OCPP2_0_1Client {
66            pub async fn $send(&self, request: $req) -> Result<$res, ClientError<OCPP2_0_1Error>> {
67                self.call::<$name>(request).await
68            }
69
70            pub async fn $on<F, FF>(&self, callback: F)
71            where
72                F: FnMut($req, Self) -> FF + Send + Sync + 'static,
73                FF: Future<Output = Result<$res, OCPP2_0_1Error>> + Send,
74            {
75                self.on::<$name, F, FF>(callback).await
76            }
77
78            #[cfg(feature = "test")]
79            pub async fn $wait_for<F, FF>(
80                &self,
81                callback: F,
82            ) -> Result<$req, ClientError<OCPP2_0_1Error>>
83            where
84                F: FnMut($req, Self) -> FF + Send + Sync + 'static,
85                FF: Future<Output = Result<$res, OCPP2_0_1Error>> + Send,
86            {
87                self.wait_for::<$name, F, FF>(callback).await
88            }
89        }
90    };
91}
92
93ocpp_2_0_1_action!(
94    Authorize,
95    AuthorizeRequest,
96    AuthorizeResponse,
97    "Authorize",
98    send_authorize,
99    on_authorize,
100    wait_for_authorize
101);
102ocpp_2_0_1_action!(
103    BootNotification,
104    BootNotificationRequest,
105    BootNotificationResponse,
106    "BootNotification",
107    send_boot_notification,
108    on_boot_notification,
109    wait_for_boot_notification
110);
111ocpp_2_0_1_action!(
112    CancelReservation,
113    CancelReservationRequest,
114    CancelReservationResponse,
115    "CancelReservation",
116    send_cancel_reservation,
117    on_cancel_reservation,
118    wait_for_cancel_reservation
119);
120ocpp_2_0_1_action!(
121    CertificateSigned,
122    CertificateSignedRequest,
123    CertificateSignedResponse,
124    "CertificateSigned",
125    send_certificate_signed,
126    on_certificate_signed,
127    wait_for_certificate_signed
128);
129ocpp_2_0_1_action!(
130    ChangeAvailability,
131    ChangeAvailabilityRequest,
132    ChangeAvailabilityResponse,
133    "ChangeAvailability",
134    send_change_availability,
135    on_change_availability,
136    wait_for_change_availability
137);
138ocpp_2_0_1_action!(
139    ClearCache,
140    ClearCacheRequest,
141    ClearCacheResponse,
142    "ClearCache",
143    send_clear_cache,
144    on_clear_cache,
145    wait_for_clear_cache
146);
147ocpp_2_0_1_action!(
148    ClearChargingProfile,
149    ClearChargingProfileRequest,
150    ClearChargingProfileResponse,
151    "ClearChargingProfile",
152    send_clear_charging_profile,
153    on_clear_charging_profile,
154    wait_for_clear_charging_profile
155);
156ocpp_2_0_1_action!(
157    ClearDisplayMessage,
158    ClearDisplayMessageRequest,
159    ClearDisplayMessageResponse,
160    "ClearDisplayMessage",
161    send_clear_display_message,
162    on_clear_display_message,
163    wait_for_clear_display_message
164);
165ocpp_2_0_1_action!(
166    ClearVariableMonitoring,
167    ClearVariableMonitoringRequest,
168    ClearVariableMonitoringResponse,
169    "ClearVariableMonitoring",
170    send_clear_variable_monitoring,
171    on_clear_variable_monitoring,
172    wait_for_clear_variable_monitoring
173);
174ocpp_2_0_1_action!(
175    ClearedChargingLimit,
176    ClearedChargingLimitRequest,
177    ClearedChargingLimitResponse,
178    "ClearedChargingLimit",
179    send_cleared_charging_limit,
180    on_cleared_charging_limit,
181    wait_for_cleared_charging_limit
182);
183ocpp_2_0_1_action!(
184    CostUpdated,
185    CostUpdatedRequest,
186    CostUpdatedResponse,
187    "CostUpdated",
188    send_cost_updated,
189    on_cost_updated,
190    wait_for_cost_updated
191);
192ocpp_2_0_1_action!(
193    CustomerInformation,
194    CustomerInformationRequest,
195    CustomerInformationResponse,
196    "CustomerInformation",
197    send_customer_information,
198    on_customer_information,
199    wait_for_customer_information
200);
201ocpp_2_0_1_action!(
202    DataTransfer,
203    DataTransferRequest,
204    DataTransferResponse,
205    "DataTransfer",
206    send_data_transfer,
207    on_data_transfer,
208    wait_for_data_transfer
209);
210ocpp_2_0_1_action!(
211    DeleteCertificate,
212    DeleteCertificateRequest,
213    DeleteCertificateResponse,
214    "DeleteCertificate",
215    send_delete_certificate,
216    on_delete_certificate,
217    wait_for_delete_certificate
218);
219ocpp_2_0_1_action!(
220    FirmwareStatusNotification,
221    FirmwareStatusNotificationRequest,
222    FirmwareStatusNotificationResponse,
223    "FirmwareStatusNotification",
224    send_firmware_status_notification,
225    on_firmware_status_notification,
226    wait_for_firmware_status_notification
227);
228ocpp_2_0_1_action!(
229    Get15118EVCertificate,
230    Get15118EVCertificateRequest,
231    Get15118EVCertificateResponse,
232    "Get15118EVCertificate",
233    send_get_15118_ev_certificate,
234    on_get_15118_ev_certificate,
235    wait_for_get_15118_ev_certificate
236);
237ocpp_2_0_1_action!(
238    GetBaseReport,
239    GetBaseReportRequest,
240    GetBaseReportResponse,
241    "GetBaseReport",
242    send_get_base_report,
243    on_get_base_report,
244    wait_for_get_base_report
245);
246ocpp_2_0_1_action!(
247    GetCertificateStatus,
248    GetCertificateStatusRequest,
249    GetCertificateStatusResponse,
250    "GetCertificateStatus",
251    send_get_certificate_status,
252    on_get_certificate_status,
253    wait_for_get_certificate_status
254);
255ocpp_2_0_1_action!(
256    GetChargingProfiles,
257    GetChargingProfilesRequest,
258    GetChargingProfilesResponse,
259    "GetChargingProfiles",
260    send_get_charging_profiles,
261    on_get_charging_profiles,
262    wait_for_get_charging_profiles
263);
264ocpp_2_0_1_action!(
265    GetCompositeSchedule,
266    GetCompositeScheduleRequest,
267    GetCompositeScheduleResponse,
268    "GetCompositeSchedule",
269    send_get_composite_schedule,
270    on_get_composite_schedule,
271    wait_for_get_composite_schedule
272);
273ocpp_2_0_1_action!(
274    GetDisplayMessages,
275    GetDisplayMessagesRequest,
276    GetDisplayMessagesResponse,
277    "GetDisplayMessages",
278    send_get_display_messages,
279    on_get_display_messages,
280    wait_for_get_display_messages
281);
282ocpp_2_0_1_action!(
283    GetInstalledCertificateIds,
284    GetInstalledCertificateIdsRequest,
285    GetInstalledCertificateIdsResponse,
286    "GetInstalledCertificateIds",
287    send_get_installed_certificate_ids,
288    on_get_installed_certificate_ids,
289    wait_for_get_installed_certificate_ids
290);
291ocpp_2_0_1_action!(
292    GetLocalListVersion,
293    GetLocalListVersionRequest,
294    GetLocalListVersionResponse,
295    "GetLocalListVersion",
296    send_get_local_list_version,
297    on_get_local_list_version,
298    wait_for_get_local_list_version
299);
300ocpp_2_0_1_action!(
301    GetLog,
302    GetLogRequest,
303    GetLogResponse,
304    "GetLog",
305    send_get_log,
306    on_get_log,
307    wait_for_get_log
308);
309ocpp_2_0_1_action!(
310    GetMonitoringReport,
311    GetMonitoringReportRequest,
312    GetMonitoringReportResponse,
313    "GetMonitoringReport",
314    send_get_monitoring_report,
315    on_get_monitoring_report,
316    wait_for_get_monitoring_report
317);
318ocpp_2_0_1_action!(
319    GetReport,
320    GetReportRequest,
321    GetReportResponse,
322    "GetReport",
323    send_get_report,
324    on_get_report,
325    wait_for_get_report
326);
327ocpp_2_0_1_action!(
328    GetTransactionStatus,
329    GetTransactionStatusRequest,
330    GetTransactionStatusResponse,
331    "GetTransactionStatus",
332    send_get_transaction_status,
333    on_get_transaction_status,
334    wait_for_get_transaction_status
335);
336ocpp_2_0_1_action!(
337    GetVariables,
338    GetVariablesRequest,
339    GetVariablesResponse,
340    "GetVariables",
341    send_get_variables,
342    on_get_variables,
343    wait_for_get_variables
344);
345ocpp_2_0_1_action!(
346    Heartbeat,
347    HeartbeatRequest,
348    HeartbeatResponse,
349    "Heartbeat",
350    send_heartbeat,
351    on_heartbeat,
352    wait_for_heartbeat
353);
354ocpp_2_0_1_action!(
355    InstallCertificate,
356    InstallCertificateRequest,
357    InstallCertificateResponse,
358    "InstallCertificate",
359    send_install_certificate,
360    on_install_certificate,
361    wait_for_install_certificate
362);
363ocpp_2_0_1_action!(
364    LogStatusNotification,
365    LogStatusNotificationRequest,
366    LogStatusNotificationResponse,
367    "LogStatusNotification",
368    send_log_status_notification,
369    on_log_status_notification,
370    wait_for_log_status_notification
371);
372ocpp_2_0_1_action!(
373    MeterValues,
374    MeterValuesRequest,
375    MeterValuesResponse,
376    "MeterValues",
377    send_meter_values,
378    on_meter_values,
379    wait_for_meter_values
380);
381ocpp_2_0_1_action!(
382    NotifyChargingLimit,
383    NotifyChargingLimitRequest,
384    NotifyChargingLimitResponse,
385    "NotifyChargingLimit",
386    send_notify_charging_limit,
387    on_notify_charging_limit,
388    wait_for_notify_charging_limit
389);
390ocpp_2_0_1_action!(
391    NotifyCustomerInformation,
392    NotifyCustomerInformationRequest,
393    NotifyCustomerInformationResponse,
394    "NotifyCustomerInformation",
395    send_notify_customer_information,
396    on_notify_customer_information,
397    wait_for_notify_customer_information
398);
399ocpp_2_0_1_action!(
400    NotifyDisplayMessages,
401    NotifyDisplayMessagesRequest,
402    NotifyDisplayMessagesResponse,
403    "NotifyDisplayMessages",
404    send_notify_display_messages,
405    on_notify_display_messages,
406    wait_for_notify_display_messages
407);
408ocpp_2_0_1_action!(
409    NotifyEVChargingNeeds,
410    NotifyEVChargingNeedsRequest,
411    NotifyEVChargingNeedsResponse,
412    "NotifyEVChargingNeeds",
413    send_notify_ev_charging_needs,
414    on_notify_ev_charging_needs,
415    wait_for_notify_ev_charging_needs
416);
417ocpp_2_0_1_action!(
418    NotifyEVChargingSchedule,
419    NotifyEVChargingScheduleRequest,
420    NotifyEVChargingScheduleResponse,
421    "NotifyEVChargingSchedule",
422    send_notify_ev_charging_schedule,
423    on_notify_ev_charging_schedule,
424    wait_for_notify_ev_charging_schedule
425);
426ocpp_2_0_1_action!(
427    NotifyEvent,
428    NotifyEventRequest,
429    NotifyEventResponse,
430    "NotifyEvent",
431    send_notify_event,
432    on_notify_event,
433    wait_for_notify_event
434);
435ocpp_2_0_1_action!(
436    NotifyMonitoringReport,
437    NotifyMonitoringReportRequest,
438    NotifyMonitoringReportResponse,
439    "NotifyMonitoringReport",
440    send_notify_monitoring_report,
441    on_notify_monitoring_report,
442    wait_for_notify_monitoring_report
443);
444ocpp_2_0_1_action!(
445    NotifyReport,
446    NotifyReportRequest,
447    NotifyReportResponse,
448    "NotifyReport",
449    send_notify_report,
450    on_notify_report,
451    wait_for_notify_report
452);
453ocpp_2_0_1_action!(
454    PublishFirmware,
455    PublishFirmwareRequest,
456    PublishFirmwareResponse,
457    "PublishFirmware",
458    send_publish_firmware,
459    on_publish_firmware,
460    wait_for_publish_firmware
461);
462ocpp_2_0_1_action!(
463    PublishFirmwareStatusNotification,
464    PublishFirmwareStatusNotificationRequest,
465    PublishFirmwareStatusNotificationResponse,
466    "PublishFirmwareStatusNotification",
467    send_publish_firmware_status_notification,
468    on_publish_firmware_status_notification,
469    wait_for_publish_firmware_status_notification
470);
471ocpp_2_0_1_action!(
472    ReportChargingProfiles,
473    ReportChargingProfilesRequest,
474    ReportChargingProfilesResponse,
475    "ReportChargingProfiles",
476    send_report_charging_profiles,
477    on_report_charging_profiles,
478    wait_for_report_charging_profiles
479);
480ocpp_2_0_1_action!(
481    RequestStartTransaction,
482    RequestStartTransactionRequest,
483    RequestStartTransactionResponse,
484    "RequestStartTransaction",
485    send_request_start_transaction,
486    on_request_start_transaction,
487    wait_for_request_start_transaction
488);
489ocpp_2_0_1_action!(
490    RequestStopTransaction,
491    RequestStopTransactionRequest,
492    RequestStopTransactionResponse,
493    "RequestStopTransaction",
494    send_request_stop_transaction,
495    on_request_stop_transaction,
496    wait_for_request_stop_transaction
497);
498ocpp_2_0_1_action!(
499    ReservationStatusUpdate,
500    ReservationStatusUpdateRequest,
501    ReservationStatusUpdateResponse,
502    "ReservationStatusUpdate",
503    send_reservation_status_update,
504    on_reservation_status_update,
505    wait_for_reservation_status_update
506);
507ocpp_2_0_1_action!(
508    ReserveNow,
509    ReserveNowRequest,
510    ReserveNowResponse,
511    "ReserveNow",
512    send_reserve_now,
513    on_reserve_now,
514    wait_for_reserve_now
515);
516ocpp_2_0_1_action!(
517    Reset,
518    ResetRequest,
519    ResetResponse,
520    "Reset",
521    send_reset,
522    on_reset,
523    wait_for_reset
524);
525ocpp_2_0_1_action!(
526    SecurityEventNotification,
527    SecurityEventNotificationRequest,
528    SecurityEventNotificationResponse,
529    "SecurityEventNotification",
530    send_security_event_notification,
531    on_security_event_notification,
532    wait_for_security_event_notification
533);
534ocpp_2_0_1_action!(
535    SendLocalList,
536    SendLocalListRequest,
537    SendLocalListResponse,
538    "SendLocalList",
539    send_send_local_list,
540    on_send_local_list,
541    wait_for_send_local_list
542);
543ocpp_2_0_1_action!(
544    SetChargingProfile,
545    SetChargingProfileRequest,
546    SetChargingProfileResponse,
547    "SetChargingProfile",
548    send_set_charging_profile,
549    on_set_charging_profile,
550    wait_for_set_charging_profile
551);
552ocpp_2_0_1_action!(
553    SetDisplayMessage,
554    SetDisplayMessageRequest,
555    SetDisplayMessageResponse,
556    "SetDisplayMessage",
557    send_set_display_message,
558    on_set_display_message,
559    wait_for_set_display_message
560);
561ocpp_2_0_1_action!(
562    SetMonitoringBase,
563    SetMonitoringBaseRequest,
564    SetMonitoringBaseResponse,
565    "SetMonitoringBase",
566    send_set_monitoring_base,
567    on_set_monitoring_base,
568    wait_for_set_monitoring_base
569);
570ocpp_2_0_1_action!(
571    SetMonitoringLevel,
572    SetMonitoringLevelRequest,
573    SetMonitoringLevelResponse,
574    "SetMonitoringLevel",
575    send_set_monitoring_level,
576    on_set_monitoring_level,
577    wait_for_set_monitoring_level
578);
579ocpp_2_0_1_action!(
580    SetNetworkProfile,
581    SetNetworkProfileRequest,
582    SetNetworkProfileResponse,
583    "SetNetworkProfile",
584    send_set_network_profile,
585    on_set_network_profile,
586    wait_for_set_network_profile
587);
588ocpp_2_0_1_action!(
589    SetVariableMonitoring,
590    SetVariableMonitoringRequest,
591    SetVariableMonitoringResponse,
592    "SetVariableMonitoring",
593    send_set_variable_monitoring,
594    on_set_variable_monitoring,
595    wait_for_set_variable_monitoring
596);
597ocpp_2_0_1_action!(
598    SetVariables,
599    SetVariablesRequest,
600    SetVariablesResponse,
601    "SetVariables",
602    send_set_variables,
603    on_set_variables,
604    wait_for_set_variables
605);
606ocpp_2_0_1_action!(
607    SignCertificate,
608    SignCertificateRequest,
609    SignCertificateResponse,
610    "SignCertificate",
611    send_sign_certificate,
612    on_sign_certificate,
613    wait_for_sign_certificate
614);
615ocpp_2_0_1_action!(
616    StatusNotification,
617    StatusNotificationRequest,
618    StatusNotificationResponse,
619    "StatusNotification",
620    send_status_notification,
621    on_status_notification,
622    wait_for_status_notification
623);
624ocpp_2_0_1_action!(
625    TransactionEvent,
626    TransactionEventRequest,
627    TransactionEventResponse,
628    "TransactionEvent",
629    send_transaction_event,
630    on_transaction_event,
631    wait_for_transaction_event
632);
633ocpp_2_0_1_action!(
634    TriggerMessage,
635    TriggerMessageRequest,
636    TriggerMessageResponse,
637    "TriggerMessage",
638    send_trigger_message,
639    on_trigger_message,
640    wait_for_trigger_message
641);
642ocpp_2_0_1_action!(
643    UnlockConnector,
644    UnlockConnectorRequest,
645    UnlockConnectorResponse,
646    "UnlockConnector",
647    send_unlock_connector,
648    on_unlock_connector,
649    wait_for_unlock_connector
650);
651ocpp_2_0_1_action!(
652    UnpublishFirmware,
653    UnpublishFirmwareRequest,
654    UnpublishFirmwareResponse,
655    "UnpublishFirmware",
656    send_unpublish_firmware,
657    on_unpublish_firmware,
658    wait_for_unpublish_firmware
659);
660ocpp_2_0_1_action!(
661    UpdateFirmware,
662    UpdateFirmwareRequest,
663    UpdateFirmwareResponse,
664    "UpdateFirmware",
665    send_update_firmware,
666    on_update_firmware,
667    wait_for_update_firmware
668);