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
51macro_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);