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, ChangeAvailabilityRequest,
9 ChangeAvailabilityResponse, ChangeConfigurationRequest, ChangeConfigurationResponse,
10 ClearCacheRequest, ClearCacheResponse, ClearChargingProfileRequest,
11 ClearChargingProfileResponse, DataTransferRequest, DataTransferResponse,
12 DiagnosticsStatusNotificationRequest, DiagnosticsStatusNotificationResponse,
13 FirmwareStatusNotificationRequest, FirmwareStatusNotificationResponse,
14 GetCompositeScheduleRequest, GetCompositeScheduleResponse, GetConfigurationRequest,
15 GetConfigurationResponse, GetDiagnosticsRequest, GetDiagnosticsResponse,
16 GetLocalListVersionRequest, GetLocalListVersionResponse, HeartbeatRequest, HeartbeatResponse,
17 MeterValuesRequest, MeterValuesResponse, RemoteStartTransactionRequest,
18 RemoteStartTransactionResponse, RemoteStopTransactionRequest, RemoteStopTransactionResponse,
19 ReserveNowRequest, ReserveNowResponse, ResetRequest, ResetResponse, SendLocalListRequest,
20 SendLocalListResponse, SetChargingProfileRequest, SetChargingProfileResponse,
21 StartTransactionRequest, StartTransactionResponse, StatusNotificationRequest,
22 StatusNotificationResponse, StopTransactionRequest, StopTransactionResponse,
23 TriggerMessageRequest, TriggerMessageResponse, UnlockConnectorRequest, UnlockConnectorResponse,
24 UpdateFirmwareRequest, UpdateFirmwareResponse,
25};
26
27macro_rules! ocpp_1_6_action {
32 ($name:ident, $req:ty, $res:ty, $action:literal, $send:ident, $on:ident, $wait_for:ident) => {
33 #[doc = concat!("Marker type for the `", $action, "` action.")]
34 pub struct $name;
35
36 impl Action for $name {
37 const NAME: &'static str = $action;
38 type Request = $req;
39 type Response = $res;
40 }
41
42 impl OCPP1_6Client {
43 pub async fn $send(&self, request: $req) -> Result<$res, ClientError<OCPP1_6Error>> {
44 self.call::<$name>(request).await
45 }
46
47 pub async fn $on<F, FF>(&self, callback: F)
48 where
49 F: FnMut($req, Self) -> FF + Send + Sync + 'static,
50 FF: Future<Output = Result<$res, OCPP1_6Error>> + Send,
51 {
52 self.on::<$name, F, FF>(callback).await
53 }
54
55 #[cfg(feature = "test")]
56 pub async fn $wait_for<F, FF>(
57 &self,
58 callback: F,
59 ) -> Result<$req, ClientError<OCPP1_6Error>>
60 where
61 F: FnMut($req, Self) -> FF + Send + Sync + 'static,
62 FF: Future<Output = Result<$res, OCPP1_6Error>> + Send,
63 {
64 self.wait_for::<$name, F, FF>(callback).await
65 }
66 }
67 };
68}
69
70ocpp_1_6_action!(
71 Authorize,
72 AuthorizeRequest,
73 AuthorizeResponse,
74 "Authorize",
75 send_authorize,
76 on_authorize,
77 wait_for_authorize
78);
79ocpp_1_6_action!(
80 BootNotification,
81 BootNotificationRequest,
82 BootNotificationResponse,
83 "BootNotification",
84 send_boot_notification,
85 on_boot_notification,
86 wait_for_boot_notification
87);
88ocpp_1_6_action!(
89 CancelReservation,
90 CancelReservationRequest,
91 CancelReservationResponse,
92 "CancelReservation",
93 send_cancel_reservation,
94 on_cancel_reservation,
95 wait_for_cancel_reservation
96);
97ocpp_1_6_action!(
98 ChangeAvailability,
99 ChangeAvailabilityRequest,
100 ChangeAvailabilityResponse,
101 "ChangeAvailability",
102 send_change_availability,
103 on_change_availability,
104 wait_for_change_availability
105);
106ocpp_1_6_action!(
107 ChangeConfiguration,
108 ChangeConfigurationRequest,
109 ChangeConfigurationResponse,
110 "ChangeConfiguration",
111 send_change_configuration,
112 on_change_configuration,
113 wait_for_change_configuration
114);
115ocpp_1_6_action!(
116 ClearCache,
117 ClearCacheRequest,
118 ClearCacheResponse,
119 "ClearCache",
120 send_clear_cache,
121 on_clear_cache,
122 wait_for_clear_cache
123);
124ocpp_1_6_action!(
125 ClearChargingProfile,
126 ClearChargingProfileRequest,
127 ClearChargingProfileResponse,
128 "ClearChargingProfile",
129 send_clear_charging_profile,
130 on_clear_charging_profile,
131 wait_for_clear_charging_profile
132);
133ocpp_1_6_action!(
134 DataTransfer,
135 DataTransferRequest,
136 DataTransferResponse,
137 "DataTransfer",
138 send_data_transfer,
139 on_data_transfer,
140 wait_for_data_transfer
141);
142ocpp_1_6_action!(
143 DiagnosticsStatusNotification,
144 DiagnosticsStatusNotificationRequest,
145 DiagnosticsStatusNotificationResponse,
146 "DiagnosticsStatusNotification",
147 send_diagnostics_status_notification,
148 on_diagnostics_status_notification,
149 wait_for_diagnostics_status_notification
150);
151ocpp_1_6_action!(
152 FirmwareStatusNotification,
153 FirmwareStatusNotificationRequest,
154 FirmwareStatusNotificationResponse,
155 "FirmwareStatusNotification",
156 send_firmware_status_notification,
157 on_firmware_status_notification,
158 wait_for_firmware_status_notification
159);
160ocpp_1_6_action!(
161 GetCompositeSchedule,
162 GetCompositeScheduleRequest,
163 GetCompositeScheduleResponse,
164 "GetCompositeSchedule",
165 send_get_composite_schedule,
166 on_get_composite_schedule,
167 wait_for_get_composite_schedule
168);
169ocpp_1_6_action!(
170 GetConfiguration,
171 GetConfigurationRequest,
172 GetConfigurationResponse,
173 "GetConfiguration",
174 send_get_configuration,
175 on_get_configuration,
176 wait_for_get_configuration
177);
178ocpp_1_6_action!(
179 GetDiagnostics,
180 GetDiagnosticsRequest,
181 GetDiagnosticsResponse,
182 "GetDiagnostics",
183 send_get_diagnostics,
184 on_get_diagnostics,
185 wait_for_get_diagnostics
186);
187ocpp_1_6_action!(
188 GetLocalListVersion,
189 GetLocalListVersionRequest,
190 GetLocalListVersionResponse,
191 "GetLocalListVersion",
192 send_get_local_list_version,
193 on_get_local_list_version,
194 wait_for_get_local_list_version
195);
196ocpp_1_6_action!(
197 Heartbeat,
198 HeartbeatRequest,
199 HeartbeatResponse,
200 "Heartbeat",
201 send_heartbeat,
202 on_heartbeat,
203 wait_for_heartbeat
204);
205ocpp_1_6_action!(
206 MeterValues,
207 MeterValuesRequest,
208 MeterValuesResponse,
209 "MeterValues",
210 send_meter_values,
211 on_meter_values,
212 wait_for_meter_values
213);
214ocpp_1_6_action!(
215 RemoteStartTransaction,
216 RemoteStartTransactionRequest,
217 RemoteStartTransactionResponse,
218 "RemoteStartTransaction",
219 send_remote_start_transaction,
220 on_remote_start_transaction,
221 wait_for_remote_start_transaction
222);
223ocpp_1_6_action!(
224 RemoteStopTransaction,
225 RemoteStopTransactionRequest,
226 RemoteStopTransactionResponse,
227 "RemoteStopTransaction",
228 send_remote_stop_transaction,
229 on_remote_stop_transaction,
230 wait_for_remote_stop_transaction
231);
232ocpp_1_6_action!(
233 ReserveNow,
234 ReserveNowRequest,
235 ReserveNowResponse,
236 "ReserveNow",
237 send_reserve_now,
238 on_reserve_now,
239 wait_for_reserve_now
240);
241ocpp_1_6_action!(
242 Reset,
243 ResetRequest,
244 ResetResponse,
245 "Reset",
246 send_reset,
247 on_reset,
248 wait_for_reset
249);
250ocpp_1_6_action!(
251 SendLocalList,
252 SendLocalListRequest,
253 SendLocalListResponse,
254 "SendLocalList",
255 send_send_local_list,
256 on_send_local_list,
257 wait_for_send_local_list
258);
259ocpp_1_6_action!(
260 SetChargingProfile,
261 SetChargingProfileRequest,
262 SetChargingProfileResponse,
263 "SetChargingProfile",
264 send_set_charging_profile,
265 on_set_charging_profile,
266 wait_for_set_charging_profile
267);
268ocpp_1_6_action!(
269 StartTransaction,
270 StartTransactionRequest,
271 StartTransactionResponse,
272 "StartTransaction",
273 send_start_transaction,
274 on_start_transaction,
275 wait_for_start_transaction
276);
277ocpp_1_6_action!(
278 StatusNotification,
279 StatusNotificationRequest,
280 StatusNotificationResponse,
281 "StatusNotification",
282 send_status_notification,
283 on_status_notification,
284 wait_for_status_notification
285);
286ocpp_1_6_action!(
287 StopTransaction,
288 StopTransactionRequest,
289 StopTransactionResponse,
290 "StopTransaction",
291 send_stop_transaction,
292 on_stop_transaction,
293 wait_for_stop_transaction
294);
295ocpp_1_6_action!(
296 TriggerMessage,
297 TriggerMessageRequest,
298 TriggerMessageResponse,
299 "TriggerMessage",
300 send_trigger_message,
301 on_trigger_message,
302 wait_for_trigger_message
303);
304ocpp_1_6_action!(
305 UnlockConnector,
306 UnlockConnectorRequest,
307 UnlockConnectorResponse,
308 "UnlockConnector",
309 send_unlock_connector,
310 on_unlock_connector,
311 wait_for_unlock_connector
312);
313ocpp_1_6_action!(
314 UpdateFirmware,
315 UpdateFirmwareRequest,
316 UpdateFirmwareResponse,
317 "UpdateFirmware",
318 send_update_firmware,
319 on_update_firmware,
320 wait_for_update_firmware
321);