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