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