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