1#[derive(Debug, Clone, PartialEq, Eq)]
6#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
7pub struct CustomData {
8 #[cfg_attr(feature = "serde", serde(rename = "vendorId"))]
9 pub vendor_id: heapless::String<255usize>,
10}
11#[derive(Debug, Clone, PartialEq, Eq)]
13#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
14pub struct AdditionalInfo<CustomDataType = crate::NoCustomData> {
15 #[cfg_attr(feature = "serde", serde(rename = "additionalIdToken"))]
17 pub additional_id_token: heapless::String<36usize>,
18 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
19 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
20 pub custom_data: Option<CustomDataType>,
21 pub r#type: heapless::String<50usize>,
23}
24#[derive(Debug, Clone, PartialEq, Eq)]
26#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
27pub enum IdTokenEnum {
28 Central,
29 #[cfg_attr(feature = "serde", serde(rename = "eMAID"))]
30 EMAID,
31 ISO14443,
32 ISO15693,
33 KeyCode,
34 Local,
35 MacAddress,
36 NoAuthorization,
37}
38#[cfg(feature = "alloc")]
39#[derive(Debug, Clone, PartialEq, Eq)]
41#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
42pub struct IdToken<CustomDataType = crate::NoCustomData> {
43 #[cfg_attr(feature = "serde", serde(rename = "additionalInfo"))]
44 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
45 pub additional_info: Option<alloc::vec::Vec<AdditionalInfo<CustomDataType>>>,
46 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
47 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
48 pub custom_data: Option<CustomDataType>,
49 #[cfg_attr(feature = "serde", serde(rename = "idToken"))]
51 pub id_token: heapless::String<36usize>,
52 pub r#type: IdTokenEnum,
53}
54#[cfg(not(feature = "alloc"))]
55#[derive(Debug, Clone, PartialEq, Eq)]
57#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
58pub struct IdToken<
59 CustomDataType = crate::NoCustomData,
60 const ID_TOKEN_ADDITIONAL_INFO_CAP: usize = 8usize,
61> {
62 #[cfg_attr(feature = "serde", serde(rename = "additionalInfo"))]
63 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
64 pub additional_info: Option<
65 heapless::Vec<AdditionalInfo<CustomDataType>, ID_TOKEN_ADDITIONAL_INFO_CAP>,
66 >,
67 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
68 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
69 pub custom_data: Option<CustomDataType>,
70 #[cfg_attr(feature = "serde", serde(rename = "idToken"))]
72 pub id_token: heapless::String<36usize>,
73 pub r#type: IdTokenEnum,
74}
75#[derive(Debug, Clone, PartialEq, Eq)]
77#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
78pub enum HashAlgorithmEnum {
79 SHA256,
80 SHA384,
81 SHA512,
82}
83#[derive(Debug, Clone, PartialEq, Eq)]
84#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
85pub struct OCSPRequestData<CustomDataType = crate::NoCustomData> {
86 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
87 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
88 pub custom_data: Option<CustomDataType>,
89 #[cfg_attr(feature = "serde", serde(rename = "hashAlgorithm"))]
90 pub hash_algorithm: HashAlgorithmEnum,
91 #[cfg_attr(feature = "serde", serde(rename = "issuerKeyHash"))]
93 pub issuer_key_hash: heapless::String<128usize>,
94 #[cfg_attr(feature = "serde", serde(rename = "issuerNameHash"))]
96 pub issuer_name_hash: heapless::String<128usize>,
97 #[cfg_attr(feature = "serde", serde(rename = "responderURL"))]
99 pub responder_u_r_l: heapless::String<512usize>,
100 #[cfg_attr(feature = "serde", serde(rename = "serialNumber"))]
102 pub serial_number: heapless::String<40usize>,
103}
104#[derive(Debug, Clone, PartialEq, Eq)]
108#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
109pub enum AuthorizeCertificateStatusEnum {
110 Accepted,
111 SignatureError,
112 CertificateExpired,
113 CertificateRevoked,
114 NoCertificateAvailable,
115 CertChainError,
116 ContractCancelled,
117}
118#[derive(Debug, Clone, PartialEq, Eq)]
122#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
123pub enum MessageFormatEnum {
124 ASCII,
125 HTML,
126 URI,
127 UTF8,
128}
129#[derive(Debug, Clone, PartialEq, Eq)]
133#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
134pub struct MessageContent<CustomDataType = crate::NoCustomData> {
135 pub content: heapless::String<512usize>,
139 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
140 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
141 pub custom_data: Option<CustomDataType>,
142 pub format: MessageFormatEnum,
143 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
147 pub language: Option<heapless::String<8usize>>,
148}
149#[derive(Debug, Clone, PartialEq, Eq)]
153#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
154pub enum AuthorizationStatusEnum {
155 Accepted,
156 Blocked,
157 ConcurrentTx,
158 Expired,
159 Invalid,
160 NoCredit,
161 NotAllowedTypeEVSE,
162 NotAtThisLocation,
163 NotAtThisTime,
164 Unknown,
165}
166#[cfg(feature = "alloc")]
167#[derive(Debug, Clone, PartialEq, Eq)]
172#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
173pub struct IdTokenInfo<CustomDataType = crate::NoCustomData> {
174 #[cfg_attr(feature = "serde", serde(rename = "cacheExpiryDateTime"))]
178 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
179 pub cache_expiry_date_time: Option<crate::OcppTimestamp>,
180 #[cfg_attr(feature = "serde", serde(rename = "chargingPriority"))]
182 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
183 pub charging_priority: Option<i64>,
184 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
185 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
186 pub custom_data: Option<CustomDataType>,
187 #[cfg_attr(feature = "serde", serde(rename = "evseId"))]
189 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
190 pub evse_id: Option<alloc::vec::Vec<i64>>,
191 #[cfg_attr(feature = "serde", serde(rename = "groupIdToken"))]
192 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
193 pub group_id_token: Option<IdToken<CustomDataType>>,
194 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
198 pub language1: Option<heapless::String<8usize>>,
199 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
203 pub language2: Option<heapless::String<8usize>>,
204 #[cfg_attr(feature = "serde", serde(rename = "personalMessage"))]
205 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
206 pub personal_message: Option<MessageContent<CustomDataType>>,
207 pub status: AuthorizationStatusEnum,
208}
209#[cfg(not(feature = "alloc"))]
210#[derive(Debug, Clone, PartialEq, Eq)]
215#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
216pub struct IdTokenInfo<
217 CustomDataType = crate::NoCustomData,
218 const ID_TOKEN_INFO_EVSE_ID_CAP: usize = 8usize,
219 const ID_TOKEN_ADDITIONAL_INFO_CAP: usize = 8usize,
220> {
221 #[cfg_attr(feature = "serde", serde(rename = "cacheExpiryDateTime"))]
225 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
226 pub cache_expiry_date_time: Option<crate::OcppTimestamp>,
227 #[cfg_attr(feature = "serde", serde(rename = "chargingPriority"))]
229 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
230 pub charging_priority: Option<i64>,
231 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
232 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
233 pub custom_data: Option<CustomDataType>,
234 #[cfg_attr(feature = "serde", serde(rename = "evseId"))]
236 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
237 pub evse_id: Option<heapless::Vec<i64, ID_TOKEN_INFO_EVSE_ID_CAP>>,
238 #[cfg_attr(feature = "serde", serde(rename = "groupIdToken"))]
239 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
240 pub group_id_token: Option<IdToken<CustomDataType, ID_TOKEN_ADDITIONAL_INFO_CAP>>,
241 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
245 pub language1: Option<heapless::String<8usize>>,
246 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
250 pub language2: Option<heapless::String<8usize>>,
251 #[cfg_attr(feature = "serde", serde(rename = "personalMessage"))]
252 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
253 pub personal_message: Option<MessageContent<CustomDataType>>,
254 pub status: AuthorizationStatusEnum,
255}
256#[derive(Debug, Clone, PartialEq, Eq)]
260#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
261pub struct Modem<CustomDataType = crate::NoCustomData> {
262 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
263 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
264 pub custom_data: Option<CustomDataType>,
265 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
269 pub iccid: Option<heapless::String<20usize>>,
270 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
274 pub imsi: Option<heapless::String<20usize>>,
275}
276#[derive(Debug, Clone, PartialEq, Eq)]
280#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
281pub struct ChargingStation<CustomDataType = crate::NoCustomData> {
282 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
283 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
284 pub custom_data: Option<CustomDataType>,
285 #[cfg_attr(feature = "serde", serde(rename = "firmwareVersion"))]
287 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
288 pub firmware_version: Option<heapless::String<50usize>>,
289 pub model: heapless::String<20usize>,
293 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
294 pub modem: Option<Modem<CustomDataType>>,
295 #[cfg_attr(feature = "serde", serde(rename = "serialNumber"))]
299 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
300 pub serial_number: Option<heapless::String<25usize>>,
301 #[cfg_attr(feature = "serde", serde(rename = "vendorName"))]
303 pub vendor_name: heapless::String<50usize>,
304}
305#[derive(Debug, Clone, PartialEq, Eq)]
307#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
308pub enum BootReasonEnum {
309 ApplicationReset,
310 FirmwareUpdate,
311 LocalReset,
312 PowerUp,
313 RemoteReset,
314 ScheduledReset,
315 Triggered,
316 Unknown,
317 Watchdog,
318}
319#[derive(Debug, Clone, PartialEq, Eq)]
322#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
323pub enum RegistrationStatusEnum {
324 Accepted,
325 Pending,
326 Rejected,
327}
328#[derive(Debug, Clone, PartialEq, Eq)]
330#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
331pub struct StatusInfo<CustomDataType = crate::NoCustomData> {
332 #[cfg_attr(feature = "serde", serde(rename = "additionalInfo"))]
334 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
335 pub additional_info: Option<heapless::String<512usize>>,
336 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
337 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
338 pub custom_data: Option<CustomDataType>,
339 #[cfg_attr(feature = "serde", serde(rename = "reasonCode"))]
341 pub reason_code: heapless::String<20usize>,
342}
343#[derive(Debug, Clone, PartialEq, Eq)]
345#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
346pub enum CancelReservationStatusEnum {
347 Accepted,
348 Rejected,
349}
350#[derive(Debug, Clone, PartialEq, Eq)]
352#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
353pub enum CertificateSigningUseEnum {
354 ChargingStationCertificate,
355 V2GCertificate,
356}
357#[derive(Debug, Clone, PartialEq, Eq)]
359#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
360pub enum CertificateSignedStatusEnum {
361 Accepted,
362 Rejected,
363}
364#[derive(Debug, Clone, PartialEq, Eq)]
368#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
369pub struct EVSE<CustomDataType = crate::NoCustomData> {
370 #[cfg_attr(feature = "serde", serde(rename = "connectorId"))]
372 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
373 pub connector_id: Option<i64>,
374 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
375 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
376 pub custom_data: Option<CustomDataType>,
377 pub id: i64,
381}
382#[derive(Debug, Clone, PartialEq, Eq)]
384#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
385pub enum OperationalStatusEnum {
386 Inoperative,
387 Operative,
388}
389#[derive(Debug, Clone, PartialEq, Eq)]
391#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
392pub enum ChangeAvailabilityStatusEnum {
393 Accepted,
394 Rejected,
395 Scheduled,
396}
397#[derive(Debug, Clone, PartialEq, Eq)]
399#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
400pub enum ClearCacheStatusEnum {
401 Accepted,
402 Rejected,
403}
404#[derive(Debug, Clone, PartialEq, Eq)]
408#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
409pub enum ChargingProfilePurposeEnum {
410 ChargingStationExternalConstraints,
411 ChargingStationMaxProfile,
412 TxDefaultProfile,
413 TxProfile,
414}
415#[derive(Debug, Clone, PartialEq, Eq)]
419#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
420pub struct ClearChargingProfile<CustomDataType = crate::NoCustomData> {
421 #[cfg_attr(feature = "serde", serde(rename = "chargingProfilePurpose"))]
422 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
423 pub charging_profile_purpose: Option<ChargingProfilePurposeEnum>,
424 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
425 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
426 pub custom_data: Option<CustomDataType>,
427 #[cfg_attr(feature = "serde", serde(rename = "evseId"))]
431 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
432 pub evse_id: Option<i64>,
433 #[cfg_attr(feature = "serde", serde(rename = "stackLevel"))]
437 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
438 pub stack_level: Option<i64>,
439}
440#[derive(Debug, Clone, PartialEq, Eq)]
442#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
443pub enum ClearChargingProfileStatusEnum {
444 Accepted,
445 Unknown,
446}
447#[derive(Debug, Clone, PartialEq, Eq)]
449#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
450pub enum ClearMessageStatusEnum {
451 Accepted,
452 Unknown,
453}
454#[derive(Debug, Clone, PartialEq, Eq)]
456#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
457pub enum ClearMonitoringStatusEnum {
458 Accepted,
459 Rejected,
460 NotFound,
461}
462#[derive(Debug, Clone, PartialEq, Eq)]
463#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
464pub struct ClearMonitoringResult<CustomDataType = crate::NoCustomData> {
465 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
466 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
467 pub custom_data: Option<CustomDataType>,
468 pub id: i64,
470 pub status: ClearMonitoringStatusEnum,
471 #[cfg_attr(feature = "serde", serde(rename = "statusInfo"))]
472 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
473 pub status_info: Option<StatusInfo<CustomDataType>>,
474}
475#[derive(Debug, Clone, PartialEq, Eq)]
477#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
478pub enum ChargingLimitSourceEnum {
479 EMS,
480 Other,
481 SO,
482 CSO,
483}
484#[derive(Debug, Clone, PartialEq, Eq)]
485#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
486pub struct CertificateHashData<CustomDataType = crate::NoCustomData> {
487 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
488 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
489 pub custom_data: Option<CustomDataType>,
490 #[cfg_attr(feature = "serde", serde(rename = "hashAlgorithm"))]
491 pub hash_algorithm: HashAlgorithmEnum,
492 #[cfg_attr(feature = "serde", serde(rename = "issuerKeyHash"))]
494 pub issuer_key_hash: heapless::String<128usize>,
495 #[cfg_attr(feature = "serde", serde(rename = "issuerNameHash"))]
497 pub issuer_name_hash: heapless::String<128usize>,
498 #[cfg_attr(feature = "serde", serde(rename = "serialNumber"))]
500 pub serial_number: heapless::String<40usize>,
501}
502#[derive(Debug, Clone, PartialEq, Eq)]
504#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
505pub enum CustomerInformationStatusEnum {
506 Accepted,
507 Rejected,
508 Invalid,
509}
510#[derive(Debug, Clone, PartialEq, Eq)]
512#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
513pub enum DataTransferStatusEnum {
514 Accepted,
515 Rejected,
516 UnknownMessageId,
517 UnknownVendorId,
518}
519#[derive(Debug, Clone, PartialEq, Eq)]
521#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
522pub enum DeleteCertificateStatusEnum {
523 Accepted,
524 Failed,
525 NotFound,
526}
527#[derive(Debug, Clone, PartialEq, Eq)]
529#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
530pub enum FirmwareStatusEnum {
531 Downloaded,
532 DownloadFailed,
533 Downloading,
534 DownloadScheduled,
535 DownloadPaused,
536 Idle,
537 InstallationFailed,
538 Installing,
539 Installed,
540 InstallRebooting,
541 InstallScheduled,
542 InstallVerificationFailed,
543 InvalidSignature,
544 SignatureVerified,
545}
546#[derive(Debug, Clone, PartialEq, Eq)]
548#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
549pub enum CertificateActionEnum {
550 Install,
551 Update,
552}
553#[derive(Debug, Clone, PartialEq, Eq)]
555#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
556pub enum Iso15118EVCertificateStatusEnum {
557 Accepted,
558 Failed,
559}
560#[derive(Debug, Clone, PartialEq, Eq)]
562#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
563pub enum ReportBaseEnum {
564 ConfigurationInventory,
565 FullInventory,
566 SummaryInventory,
567}
568#[derive(Debug, Clone, PartialEq, Eq)]
570#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
571pub enum GenericDeviceModelStatusEnum {
572 Accepted,
573 Rejected,
574 NotSupported,
575 EmptyResultSet,
576}
577#[derive(Debug, Clone, PartialEq, Eq)]
579#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
580pub enum GetCertificateStatusEnum {
581 Accepted,
582 Failed,
583}
584#[cfg(feature = "alloc")]
585#[derive(Debug, Clone, PartialEq, Eq)]
589#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
590pub struct ChargingProfileCriterion<CustomDataType = crate::NoCustomData> {
591 #[cfg_attr(feature = "serde", serde(rename = "chargingLimitSource"))]
593 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
594 pub charging_limit_source: Option<heapless::Vec<ChargingLimitSourceEnum, 4usize>>,
595 #[cfg_attr(feature = "serde", serde(rename = "chargingProfileId"))]
597 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
598 pub charging_profile_id: Option<alloc::vec::Vec<i64>>,
599 #[cfg_attr(feature = "serde", serde(rename = "chargingProfilePurpose"))]
600 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
601 pub charging_profile_purpose: Option<ChargingProfilePurposeEnum>,
602 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
603 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
604 pub custom_data: Option<CustomDataType>,
605 #[cfg_attr(feature = "serde", serde(rename = "stackLevel"))]
609 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
610 pub stack_level: Option<i64>,
611}
612#[cfg(not(feature = "alloc"))]
613#[derive(Debug, Clone, PartialEq, Eq)]
617#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
618pub struct ChargingProfileCriterion<
619 CustomDataType = crate::NoCustomData,
620 const CHARGING_PROFILE_CRITERION_CHARGING_PROFILE_ID_CAP: usize = 8usize,
621> {
622 #[cfg_attr(feature = "serde", serde(rename = "chargingLimitSource"))]
624 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
625 pub charging_limit_source: Option<heapless::Vec<ChargingLimitSourceEnum, 4usize>>,
626 #[cfg_attr(feature = "serde", serde(rename = "chargingProfileId"))]
628 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
629 pub charging_profile_id: Option<
630 heapless::Vec<i64, CHARGING_PROFILE_CRITERION_CHARGING_PROFILE_ID_CAP>,
631 >,
632 #[cfg_attr(feature = "serde", serde(rename = "chargingProfilePurpose"))]
633 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
634 pub charging_profile_purpose: Option<ChargingProfilePurposeEnum>,
635 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
636 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
637 pub custom_data: Option<CustomDataType>,
638 #[cfg_attr(feature = "serde", serde(rename = "stackLevel"))]
642 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
643 pub stack_level: Option<i64>,
644}
645#[derive(Debug, Clone, PartialEq, Eq)]
647#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
648pub enum GetChargingProfileStatusEnum {
649 Accepted,
650 NoProfiles,
651}
652#[derive(Debug, Clone, PartialEq, Eq)]
654#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
655pub enum ChargingRateUnitEnum {
656 W,
657 A,
658}
659#[derive(Debug, Clone, PartialEq)]
663#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
664pub struct ChargingSchedulePeriod<CustomDataType = crate::NoCustomData> {
665 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
666 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
667 pub custom_data: Option<CustomDataType>,
668 pub limit: f64,
672 #[cfg_attr(feature = "serde", serde(rename = "numberPhases"))]
676 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
677 pub number_phases: Option<i64>,
678 #[cfg_attr(feature = "serde", serde(rename = "phaseToUse"))]
680 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
681 pub phase_to_use: Option<i64>,
682 #[cfg_attr(feature = "serde", serde(rename = "startPeriod"))]
686 pub start_period: i64,
687}
688#[cfg(feature = "alloc")]
689#[derive(Debug, Clone, PartialEq)]
692#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
693pub struct CompositeSchedule<CustomDataType = crate::NoCustomData> {
694 #[cfg_attr(feature = "serde", serde(rename = "chargingRateUnit"))]
695 pub charging_rate_unit: ChargingRateUnitEnum,
696 #[cfg_attr(feature = "serde", serde(rename = "chargingSchedulePeriod"))]
697 pub charging_schedule_period: alloc::vec::Vec<
698 ChargingSchedulePeriod<CustomDataType>,
699 >,
700 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
701 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
702 pub custom_data: Option<CustomDataType>,
703 pub duration: i64,
705 #[cfg_attr(feature = "serde", serde(rename = "evseId"))]
710 pub evse_id: i64,
711 #[cfg_attr(feature = "serde", serde(rename = "scheduleStart"))]
715 pub schedule_start: crate::OcppTimestamp,
716}
717#[cfg(not(feature = "alloc"))]
718#[derive(Debug, Clone, PartialEq)]
721#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
722pub struct CompositeSchedule<
723 CustomDataType = crate::NoCustomData,
724 const COMPOSITE_SCHEDULE_CHARGING_SCHEDULE_PERIOD_CAP: usize = 8usize,
725> {
726 #[cfg_attr(feature = "serde", serde(rename = "chargingRateUnit"))]
727 pub charging_rate_unit: ChargingRateUnitEnum,
728 #[cfg_attr(feature = "serde", serde(rename = "chargingSchedulePeriod"))]
729 pub charging_schedule_period: heapless::Vec<
730 ChargingSchedulePeriod<CustomDataType>,
731 COMPOSITE_SCHEDULE_CHARGING_SCHEDULE_PERIOD_CAP,
732 >,
733 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
734 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
735 pub custom_data: Option<CustomDataType>,
736 pub duration: i64,
738 #[cfg_attr(feature = "serde", serde(rename = "evseId"))]
743 pub evse_id: i64,
744 #[cfg_attr(feature = "serde", serde(rename = "scheduleStart"))]
748 pub schedule_start: crate::OcppTimestamp,
749}
750#[derive(Debug, Clone, PartialEq, Eq)]
753#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
754pub enum GenericStatusEnum {
755 Accepted,
756 Rejected,
757}
758#[derive(Debug, Clone, PartialEq, Eq)]
760#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
761pub enum MessagePriorityEnum {
762 AlwaysFront,
763 InFront,
764 NormalCycle,
765}
766#[derive(Debug, Clone, PartialEq, Eq)]
768#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
769pub enum MessageStateEnum {
770 Charging,
771 Faulted,
772 Idle,
773 Unavailable,
774}
775#[derive(Debug, Clone, PartialEq, Eq)]
777#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
778pub enum GetDisplayMessagesStatusEnum {
779 Accepted,
780 Unknown,
781}
782#[derive(Debug, Clone, PartialEq, Eq)]
783#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
784pub enum GetCertificateIdUseEnum {
785 V2GRootCertificate,
786 MORootCertificate,
787 CSMSRootCertificate,
788 V2GCertificateChain,
789 ManufacturerRootCertificate,
790}
791#[derive(Debug, Clone, PartialEq, Eq)]
792#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
793pub struct CertificateHashDataChain<CustomDataType = crate::NoCustomData> {
794 #[cfg_attr(feature = "serde", serde(rename = "certificateHashData"))]
795 pub certificate_hash_data: CertificateHashData<CustomDataType>,
796 #[cfg_attr(feature = "serde", serde(rename = "certificateType"))]
797 pub certificate_type: GetCertificateIdUseEnum,
798 #[cfg_attr(feature = "serde", serde(rename = "childCertificateHashData"))]
799 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
800 pub child_certificate_hash_data: Option<
801 heapless::Vec<CertificateHashData<CustomDataType>, 4usize>,
802 >,
803 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
804 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
805 pub custom_data: Option<CustomDataType>,
806}
807#[derive(Debug, Clone, PartialEq, Eq)]
809#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
810pub enum GetInstalledCertificateStatusEnum {
811 Accepted,
812 NotFound,
813}
814#[derive(Debug, Clone, PartialEq, Eq)]
818#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
819pub struct LogParameters<CustomDataType = crate::NoCustomData> {
820 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
821 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
822 pub custom_data: Option<CustomDataType>,
823 #[cfg_attr(feature = "serde", serde(rename = "latestTimestamp"))]
827 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
828 pub latest_timestamp: Option<crate::OcppTimestamp>,
829 #[cfg_attr(feature = "serde", serde(rename = "oldestTimestamp"))]
833 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
834 pub oldest_timestamp: Option<crate::OcppTimestamp>,
835 #[cfg_attr(feature = "serde", serde(rename = "remoteLocation"))]
839 pub remote_location: heapless::String<512usize>,
840}
841#[derive(Debug, Clone, PartialEq, Eq)]
844#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
845pub enum LogEnum {
846 DiagnosticsLog,
847 SecurityLog,
848}
849#[derive(Debug, Clone, PartialEq, Eq)]
851#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
852pub enum LogStatusEnum {
853 Accepted,
854 Rejected,
855 AcceptedCanceled,
856}
857#[derive(Debug, Clone, PartialEq, Eq)]
859#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
860pub struct Component<CustomDataType = crate::NoCustomData> {
861 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
862 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
863 pub custom_data: Option<CustomDataType>,
864 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
865 pub evse: Option<EVSE<CustomDataType>>,
866 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
868 pub instance: Option<heapless::String<50usize>>,
869 pub name: heapless::String<50usize>,
871}
872#[derive(Debug, Clone, PartialEq, Eq)]
874#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
875pub struct Variable<CustomDataType = crate::NoCustomData> {
876 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
877 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
878 pub custom_data: Option<CustomDataType>,
879 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
881 pub instance: Option<heapless::String<50usize>>,
882 pub name: heapless::String<50usize>,
884}
885#[derive(Debug, Clone, PartialEq, Eq)]
887#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
888pub struct ComponentVariable<CustomDataType = crate::NoCustomData> {
889 pub component: Component<CustomDataType>,
890 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
891 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
892 pub custom_data: Option<CustomDataType>,
893 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
894 pub variable: Option<Variable<CustomDataType>>,
895}
896#[derive(Debug, Clone, PartialEq, Eq)]
897#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
898pub enum MonitoringCriterionEnum {
899 ThresholdMonitoring,
900 DeltaMonitoring,
901 PeriodicMonitoring,
902}
903#[derive(Debug, Clone, PartialEq, Eq)]
904#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
905pub enum ComponentCriterionEnum {
906 Active,
907 Available,
908 Enabled,
909 Problem,
910}
911#[derive(Debug, Clone, PartialEq, Eq)]
913#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
914pub enum AttributeEnum {
915 Actual,
916 Target,
917 MinSet,
918 MaxSet,
919}
920#[derive(Debug, Clone, PartialEq, Eq)]
922#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
923pub struct GetVariableData<CustomDataType = crate::NoCustomData> {
924 #[cfg_attr(feature = "serde", serde(rename = "attributeType"))]
925 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
926 pub attribute_type: Option<AttributeEnum>,
927 pub component: Component<CustomDataType>,
928 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
929 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
930 pub custom_data: Option<CustomDataType>,
931 pub variable: Variable<CustomDataType>,
932}
933#[derive(Debug, Clone, PartialEq, Eq)]
935#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
936pub enum GetVariableStatusEnum {
937 Accepted,
938 Rejected,
939 UnknownComponent,
940 UnknownVariable,
941 NotSupportedAttributeType,
942}
943#[cfg(feature = "alloc")]
944#[derive(Debug, Clone, PartialEq, Eq)]
946#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
947pub struct GetVariableResult<CustomDataType = crate::NoCustomData> {
948 #[cfg_attr(feature = "serde", serde(rename = "attributeStatus"))]
949 pub attribute_status: GetVariableStatusEnum,
950 #[cfg_attr(feature = "serde", serde(rename = "attributeStatusInfo"))]
951 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
952 pub attribute_status_info: Option<StatusInfo<CustomDataType>>,
953 #[cfg_attr(feature = "serde", serde(rename = "attributeType"))]
954 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
955 pub attribute_type: Option<AttributeEnum>,
956 #[cfg_attr(feature = "serde", serde(rename = "attributeValue"))]
960 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
961 pub attribute_value: Option<alloc::string::String>,
962 pub component: Component<CustomDataType>,
963 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
964 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
965 pub custom_data: Option<CustomDataType>,
966 pub variable: Variable<CustomDataType>,
967}
968#[cfg(not(feature = "alloc"))]
969#[derive(Debug, Clone, PartialEq, Eq)]
971#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
972pub struct GetVariableResult<
973 CustomDataType = crate::NoCustomData,
974 const GET_VARIABLE_RESULT_ATTRIBUTE_VALUE_CAP: usize = 1024usize,
975> {
976 #[cfg_attr(feature = "serde", serde(rename = "attributeStatus"))]
977 pub attribute_status: GetVariableStatusEnum,
978 #[cfg_attr(feature = "serde", serde(rename = "attributeStatusInfo"))]
979 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
980 pub attribute_status_info: Option<StatusInfo<CustomDataType>>,
981 #[cfg_attr(feature = "serde", serde(rename = "attributeType"))]
982 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
983 pub attribute_type: Option<AttributeEnum>,
984 #[cfg_attr(feature = "serde", serde(rename = "attributeValue"))]
988 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
989 pub attribute_value: Option<
990 heapless::String<GET_VARIABLE_RESULT_ATTRIBUTE_VALUE_CAP>,
991 >,
992 pub component: Component<CustomDataType>,
993 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
994 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
995 pub custom_data: Option<CustomDataType>,
996 pub variable: Variable<CustomDataType>,
997}
998#[derive(Debug, Clone, PartialEq, Eq)]
1000#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1001pub enum InstallCertificateUseEnum {
1002 V2GRootCertificate,
1003 MORootCertificate,
1004 CSMSRootCertificate,
1005 ManufacturerRootCertificate,
1006}
1007#[derive(Debug, Clone, PartialEq, Eq)]
1009#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1010pub enum InstallCertificateStatusEnum {
1011 Accepted,
1012 Rejected,
1013 Failed,
1014}
1015#[derive(Debug, Clone, PartialEq, Eq)]
1017#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1018pub enum UploadLogStatusEnum {
1019 BadMessage,
1020 Idle,
1021 NotSupportedOperation,
1022 PermissionDenied,
1023 Uploaded,
1024 UploadFailure,
1025 Uploading,
1026 AcceptedCanceled,
1027}
1028#[derive(Debug, Clone, PartialEq, Eq)]
1032#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1033pub enum ReadingContextEnum {
1034 #[cfg_attr(feature = "serde", serde(rename = "Interruption.Begin"))]
1035 InterruptionBegin,
1036 #[cfg_attr(feature = "serde", serde(rename = "Interruption.End"))]
1037 InterruptionEnd,
1038 Other,
1039 #[cfg_attr(feature = "serde", serde(rename = "Sample.Clock"))]
1040 SampleClock,
1041 #[cfg_attr(feature = "serde", serde(rename = "Sample.Periodic"))]
1042 SamplePeriodic,
1043 #[cfg_attr(feature = "serde", serde(rename = "Transaction.Begin"))]
1044 TransactionBegin,
1045 #[cfg_attr(feature = "serde", serde(rename = "Transaction.End"))]
1046 TransactionEnd,
1047 Trigger,
1048}
1049#[derive(Debug, Clone, PartialEq, Eq)]
1053#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1054pub enum LocationEnum {
1055 Body,
1056 Cable,
1057 EV,
1058 Inlet,
1059 Outlet,
1060}
1061#[derive(Debug, Clone, PartialEq, Eq)]
1065#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1066pub enum MeasurandEnum {
1067 #[cfg_attr(feature = "serde", serde(rename = "Current.Export"))]
1068 CurrentExport,
1069 #[cfg_attr(feature = "serde", serde(rename = "Current.Import"))]
1070 CurrentImport,
1071 #[cfg_attr(feature = "serde", serde(rename = "Current.Offered"))]
1072 CurrentOffered,
1073 #[cfg_attr(feature = "serde", serde(rename = "Energy.Active.Export.Register"))]
1074 EnergyActiveExportRegister,
1075 #[cfg_attr(feature = "serde", serde(rename = "Energy.Active.Import.Register"))]
1076 EnergyActiveImportRegister,
1077 #[cfg_attr(feature = "serde", serde(rename = "Energy.Reactive.Export.Register"))]
1078 EnergyReactiveExportRegister,
1079 #[cfg_attr(feature = "serde", serde(rename = "Energy.Reactive.Import.Register"))]
1080 EnergyReactiveImportRegister,
1081 #[cfg_attr(feature = "serde", serde(rename = "Energy.Active.Export.Interval"))]
1082 EnergyActiveExportInterval,
1083 #[cfg_attr(feature = "serde", serde(rename = "Energy.Active.Import.Interval"))]
1084 EnergyActiveImportInterval,
1085 #[cfg_attr(feature = "serde", serde(rename = "Energy.Active.Net"))]
1086 EnergyActiveNet,
1087 #[cfg_attr(feature = "serde", serde(rename = "Energy.Reactive.Export.Interval"))]
1088 EnergyReactiveExportInterval,
1089 #[cfg_attr(feature = "serde", serde(rename = "Energy.Reactive.Import.Interval"))]
1090 EnergyReactiveImportInterval,
1091 #[cfg_attr(feature = "serde", serde(rename = "Energy.Reactive.Net"))]
1092 EnergyReactiveNet,
1093 #[cfg_attr(feature = "serde", serde(rename = "Energy.Apparent.Net"))]
1094 EnergyApparentNet,
1095 #[cfg_attr(feature = "serde", serde(rename = "Energy.Apparent.Import"))]
1096 EnergyApparentImport,
1097 #[cfg_attr(feature = "serde", serde(rename = "Energy.Apparent.Export"))]
1098 EnergyApparentExport,
1099 Frequency,
1100 #[cfg_attr(feature = "serde", serde(rename = "Power.Active.Export"))]
1101 PowerActiveExport,
1102 #[cfg_attr(feature = "serde", serde(rename = "Power.Active.Import"))]
1103 PowerActiveImport,
1104 #[cfg_attr(feature = "serde", serde(rename = "Power.Factor"))]
1105 PowerFactor,
1106 #[cfg_attr(feature = "serde", serde(rename = "Power.Offered"))]
1107 PowerOffered,
1108 #[cfg_attr(feature = "serde", serde(rename = "Power.Reactive.Export"))]
1109 PowerReactiveExport,
1110 #[cfg_attr(feature = "serde", serde(rename = "Power.Reactive.Import"))]
1111 PowerReactiveImport,
1112 SoC,
1113 Voltage,
1114}
1115#[derive(Debug, Clone, PartialEq, Eq)]
1119#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1120pub enum PhaseEnum {
1121 L1,
1122 L2,
1123 L3,
1124 N,
1125 #[cfg_attr(feature = "serde", serde(rename = "L1-N"))]
1126 L1N,
1127 #[cfg_attr(feature = "serde", serde(rename = "L2-N"))]
1128 L2N,
1129 #[cfg_attr(feature = "serde", serde(rename = "L3-N"))]
1130 L3N,
1131 #[cfg_attr(feature = "serde", serde(rename = "L1-L2"))]
1132 L1L2,
1133 #[cfg_attr(feature = "serde", serde(rename = "L2-L3"))]
1134 L2L3,
1135 #[cfg_attr(feature = "serde", serde(rename = "L3-L1"))]
1136 L3L1,
1137}
1138#[cfg(feature = "alloc")]
1139#[derive(Debug, Clone, PartialEq, Eq)]
1141#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1142pub struct SignedMeterValue<CustomDataType = crate::NoCustomData> {
1143 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1144 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1145 pub custom_data: Option<CustomDataType>,
1146 #[cfg_attr(feature = "serde", serde(rename = "encodingMethod"))]
1148 pub encoding_method: heapless::String<50usize>,
1149 #[cfg_attr(feature = "serde", serde(rename = "publicKey"))]
1151 pub public_key: alloc::string::String,
1152 #[cfg_attr(feature = "serde", serde(rename = "signedMeterData"))]
1154 pub signed_meter_data: alloc::string::String,
1155 #[cfg_attr(feature = "serde", serde(rename = "signingMethod"))]
1157 pub signing_method: heapless::String<50usize>,
1158}
1159#[cfg(not(feature = "alloc"))]
1160#[derive(Debug, Clone, PartialEq, Eq)]
1162#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1163pub struct SignedMeterValue<
1164 CustomDataType = crate::NoCustomData,
1165 const SIGNED_METER_VALUE_PUBLIC_KEY_CAP: usize = 1024usize,
1166 const SIGNED_METER_VALUE_SIGNED_METER_DATA_CAP: usize = 1024usize,
1167> {
1168 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1169 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1170 pub custom_data: Option<CustomDataType>,
1171 #[cfg_attr(feature = "serde", serde(rename = "encodingMethod"))]
1173 pub encoding_method: heapless::String<50usize>,
1174 #[cfg_attr(feature = "serde", serde(rename = "publicKey"))]
1176 pub public_key: heapless::String<SIGNED_METER_VALUE_PUBLIC_KEY_CAP>,
1177 #[cfg_attr(feature = "serde", serde(rename = "signedMeterData"))]
1179 pub signed_meter_data: heapless::String<SIGNED_METER_VALUE_SIGNED_METER_DATA_CAP>,
1180 #[cfg_attr(feature = "serde", serde(rename = "signingMethod"))]
1182 pub signing_method: heapless::String<50usize>,
1183}
1184#[derive(Debug, Clone, PartialEq, Eq)]
1186#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1187pub struct UnitOfMeasure<CustomDataType = crate::NoCustomData> {
1188 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1189 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1190 pub custom_data: Option<CustomDataType>,
1191 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1193 pub multiplier: Option<i64>,
1194 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1198 pub unit: Option<heapless::String<20usize>>,
1199}
1200#[cfg(feature = "alloc")]
1201#[derive(Debug, Clone, PartialEq)]
1207#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1208pub struct SampledValue<CustomDataType = crate::NoCustomData> {
1209 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1210 pub context: Option<ReadingContextEnum>,
1211 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1212 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1213 pub custom_data: Option<CustomDataType>,
1214 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1215 pub location: Option<LocationEnum>,
1216 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1217 pub measurand: Option<MeasurandEnum>,
1218 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1219 pub phase: Option<PhaseEnum>,
1220 #[cfg_attr(feature = "serde", serde(rename = "signedMeterValue"))]
1221 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1222 pub signed_meter_value: Option<SignedMeterValue<CustomDataType>>,
1223 #[cfg_attr(feature = "serde", serde(rename = "unitOfMeasure"))]
1224 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1225 pub unit_of_measure: Option<UnitOfMeasure<CustomDataType>>,
1226 pub value: f64,
1230}
1231#[cfg(not(feature = "alloc"))]
1232#[derive(Debug, Clone, PartialEq)]
1238#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1239pub struct SampledValue<
1240 CustomDataType = crate::NoCustomData,
1241 const SIGNED_METER_VALUE_PUBLIC_KEY_CAP: usize = 1024usize,
1242 const SIGNED_METER_VALUE_SIGNED_METER_DATA_CAP: usize = 1024usize,
1243> {
1244 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1245 pub context: Option<ReadingContextEnum>,
1246 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1247 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1248 pub custom_data: Option<CustomDataType>,
1249 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1250 pub location: Option<LocationEnum>,
1251 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1252 pub measurand: Option<MeasurandEnum>,
1253 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1254 pub phase: Option<PhaseEnum>,
1255 #[cfg_attr(feature = "serde", serde(rename = "signedMeterValue"))]
1256 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1257 pub signed_meter_value: Option<
1258 SignedMeterValue<
1259 CustomDataType,
1260 SIGNED_METER_VALUE_PUBLIC_KEY_CAP,
1261 SIGNED_METER_VALUE_SIGNED_METER_DATA_CAP,
1262 >,
1263 >,
1264 #[cfg_attr(feature = "serde", serde(rename = "unitOfMeasure"))]
1265 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1266 pub unit_of_measure: Option<UnitOfMeasure<CustomDataType>>,
1267 pub value: f64,
1271}
1272#[cfg(feature = "alloc")]
1273#[derive(Debug, Clone, PartialEq)]
1277#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1278pub struct MeterValue<CustomDataType = crate::NoCustomData> {
1279 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1280 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1281 pub custom_data: Option<CustomDataType>,
1282 #[cfg_attr(feature = "serde", serde(rename = "sampledValue"))]
1283 pub sampled_value: alloc::vec::Vec<SampledValue<CustomDataType>>,
1284 pub timestamp: crate::OcppTimestamp,
1288}
1289#[cfg(not(feature = "alloc"))]
1290#[derive(Debug, Clone, PartialEq)]
1294#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1295pub struct MeterValue<
1296 CustomDataType = crate::NoCustomData,
1297 const METER_VALUE_SAMPLED_VALUE_CAP: usize = 8usize,
1298 const SIGNED_METER_VALUE_PUBLIC_KEY_CAP: usize = 1024usize,
1299 const SIGNED_METER_VALUE_SIGNED_METER_DATA_CAP: usize = 1024usize,
1300> {
1301 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1302 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1303 pub custom_data: Option<CustomDataType>,
1304 #[cfg_attr(feature = "serde", serde(rename = "sampledValue"))]
1305 pub sampled_value: heapless::Vec<
1306 SampledValue<
1307 CustomDataType,
1308 SIGNED_METER_VALUE_PUBLIC_KEY_CAP,
1309 SIGNED_METER_VALUE_SIGNED_METER_DATA_CAP,
1310 >,
1311 METER_VALUE_SAMPLED_VALUE_CAP,
1312 >,
1313 pub timestamp: crate::OcppTimestamp,
1317}
1318#[derive(Debug, Clone, PartialEq, Eq)]
1321#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1322pub struct ChargingLimit<CustomDataType = crate::NoCustomData> {
1323 #[cfg_attr(feature = "serde", serde(rename = "chargingLimitSource"))]
1324 pub charging_limit_source: ChargingLimitSourceEnum,
1325 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1326 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1327 pub custom_data: Option<CustomDataType>,
1328 #[cfg_attr(feature = "serde", serde(rename = "isGridCritical"))]
1332 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1333 pub is_grid_critical: Option<bool>,
1334}
1335#[derive(Debug, Clone, PartialEq, Eq)]
1339#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1340pub enum CostKindEnum {
1341 CarbonDioxideEmission,
1342 RelativePricePercentage,
1343 RenewableGenerationPercentage,
1344}
1345#[derive(Debug, Clone, PartialEq, Eq)]
1348#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1349pub struct Cost<CustomDataType = crate::NoCustomData> {
1350 pub amount: i64,
1354 #[cfg_attr(feature = "serde", serde(rename = "amountMultiplier"))]
1358 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1359 pub amount_multiplier: Option<i64>,
1360 #[cfg_attr(feature = "serde", serde(rename = "costKind"))]
1361 pub cost_kind: CostKindEnum,
1362 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1363 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1364 pub custom_data: Option<CustomDataType>,
1365}
1366#[derive(Debug, Clone, PartialEq)]
1369#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1370pub struct ConsumptionCost<CustomDataType = crate::NoCustomData> {
1371 pub cost: heapless::Vec<Cost<CustomDataType>, 3usize>,
1372 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1373 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1374 pub custom_data: Option<CustomDataType>,
1375 #[cfg_attr(feature = "serde", serde(rename = "startValue"))]
1379 pub start_value: f64,
1380}
1381#[derive(Debug, Clone, PartialEq, Eq)]
1384#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1385pub struct RelativeTimeInterval<CustomDataType = crate::NoCustomData> {
1386 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1387 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1388 pub custom_data: Option<CustomDataType>,
1389 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1393 pub duration: Option<i64>,
1394 pub start: i64,
1398}
1399#[derive(Debug, Clone, PartialEq)]
1402#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1403pub struct SalesTariffEntry<CustomDataType = crate::NoCustomData> {
1404 #[cfg_attr(feature = "serde", serde(rename = "consumptionCost"))]
1405 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1406 pub consumption_cost: Option<heapless::Vec<ConsumptionCost<CustomDataType>, 3usize>>,
1407 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1408 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1409 pub custom_data: Option<CustomDataType>,
1410 #[cfg_attr(feature = "serde", serde(rename = "ePriceLevel"))]
1414 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1415 pub e_price_level: Option<i64>,
1416 #[cfg_attr(feature = "serde", serde(rename = "relativeTimeInterval"))]
1417 pub relative_time_interval: RelativeTimeInterval<CustomDataType>,
1418}
1419#[cfg(feature = "alloc")]
1420#[derive(Debug, Clone, PartialEq)]
1424#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1425pub struct SalesTariff<CustomDataType = crate::NoCustomData> {
1426 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1427 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1428 pub custom_data: Option<CustomDataType>,
1429 pub id: i64,
1433 #[cfg_attr(feature = "serde", serde(rename = "numEPriceLevels"))]
1437 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1438 pub num_e_price_levels: Option<i64>,
1439 #[cfg_attr(feature = "serde", serde(rename = "salesTariffDescription"))]
1443 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1444 pub sales_tariff_description: Option<heapless::String<32usize>>,
1445 #[cfg_attr(feature = "serde", serde(rename = "salesTariffEntry"))]
1446 pub sales_tariff_entry: alloc::vec::Vec<SalesTariffEntry<CustomDataType>>,
1447}
1448#[cfg(not(feature = "alloc"))]
1449#[derive(Debug, Clone, PartialEq)]
1453#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1454pub struct SalesTariff<
1455 CustomDataType = crate::NoCustomData,
1456 const SALES_TARIFF_SALES_TARIFF_ENTRY_CAP: usize = 8usize,
1457> {
1458 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1459 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1460 pub custom_data: Option<CustomDataType>,
1461 pub id: i64,
1465 #[cfg_attr(feature = "serde", serde(rename = "numEPriceLevels"))]
1469 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1470 pub num_e_price_levels: Option<i64>,
1471 #[cfg_attr(feature = "serde", serde(rename = "salesTariffDescription"))]
1475 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1476 pub sales_tariff_description: Option<heapless::String<32usize>>,
1477 #[cfg_attr(feature = "serde", serde(rename = "salesTariffEntry"))]
1478 pub sales_tariff_entry: heapless::Vec<
1479 SalesTariffEntry<CustomDataType>,
1480 SALES_TARIFF_SALES_TARIFF_ENTRY_CAP,
1481 >,
1482}
1483#[cfg(feature = "alloc")]
1484#[derive(Debug, Clone, PartialEq)]
1488#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1489pub struct ChargingSchedule<CustomDataType = crate::NoCustomData> {
1490 #[cfg_attr(feature = "serde", serde(rename = "chargingRateUnit"))]
1491 pub charging_rate_unit: ChargingRateUnitEnum,
1492 #[cfg_attr(feature = "serde", serde(rename = "chargingSchedulePeriod"))]
1493 pub charging_schedule_period: alloc::vec::Vec<
1494 ChargingSchedulePeriod<CustomDataType>,
1495 >,
1496 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1497 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1498 pub custom_data: Option<CustomDataType>,
1499 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1503 pub duration: Option<i64>,
1504 pub id: i64,
1506 #[cfg_attr(feature = "serde", serde(rename = "minChargingRate"))]
1510 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1511 pub min_charging_rate: Option<f64>,
1512 #[cfg_attr(feature = "serde", serde(rename = "salesTariff"))]
1513 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1514 pub sales_tariff: Option<SalesTariff<CustomDataType>>,
1515 #[cfg_attr(feature = "serde", serde(rename = "startSchedule"))]
1519 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1520 pub start_schedule: Option<crate::OcppTimestamp>,
1521}
1522#[cfg(not(feature = "alloc"))]
1523#[derive(Debug, Clone, PartialEq)]
1527#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1528pub struct ChargingSchedule<
1529 CustomDataType = crate::NoCustomData,
1530 const CHARGING_SCHEDULE_CHARGING_SCHEDULE_PERIOD_CAP: usize = 8usize,
1531 const SALES_TARIFF_SALES_TARIFF_ENTRY_CAP: usize = 8usize,
1532> {
1533 #[cfg_attr(feature = "serde", serde(rename = "chargingRateUnit"))]
1534 pub charging_rate_unit: ChargingRateUnitEnum,
1535 #[cfg_attr(feature = "serde", serde(rename = "chargingSchedulePeriod"))]
1536 pub charging_schedule_period: heapless::Vec<
1537 ChargingSchedulePeriod<CustomDataType>,
1538 CHARGING_SCHEDULE_CHARGING_SCHEDULE_PERIOD_CAP,
1539 >,
1540 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1541 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1542 pub custom_data: Option<CustomDataType>,
1543 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1547 pub duration: Option<i64>,
1548 pub id: i64,
1550 #[cfg_attr(feature = "serde", serde(rename = "minChargingRate"))]
1554 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1555 pub min_charging_rate: Option<f64>,
1556 #[cfg_attr(feature = "serde", serde(rename = "salesTariff"))]
1557 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1558 pub sales_tariff: Option<
1559 SalesTariff<CustomDataType, SALES_TARIFF_SALES_TARIFF_ENTRY_CAP>,
1560 >,
1561 #[cfg_attr(feature = "serde", serde(rename = "startSchedule"))]
1565 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1566 pub start_schedule: Option<crate::OcppTimestamp>,
1567}
1568#[derive(Debug, Clone, PartialEq, Eq)]
1572#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1573pub struct MessageInfo<CustomDataType = crate::NoCustomData> {
1574 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1575 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1576 pub custom_data: Option<CustomDataType>,
1577 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1578 pub display: Option<Component<CustomDataType>>,
1579 #[cfg_attr(feature = "serde", serde(rename = "endDateTime"))]
1583 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1584 pub end_date_time: Option<crate::OcppTimestamp>,
1585 pub id: i64,
1589 pub message: MessageContent<CustomDataType>,
1590 pub priority: MessagePriorityEnum,
1591 #[cfg_attr(feature = "serde", serde(rename = "startDateTime"))]
1595 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1596 pub start_date_time: Option<crate::OcppTimestamp>,
1597 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1598 pub state: Option<MessageStateEnum>,
1599 #[cfg_attr(feature = "serde", serde(rename = "transactionId"))]
1603 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1604 pub transaction_id: Option<heapless::String<36usize>>,
1605}
1606#[derive(Debug, Clone, PartialEq, Eq)]
1610#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1611pub struct ACChargingParameters<CustomDataType = crate::NoCustomData> {
1612 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1613 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1614 pub custom_data: Option<CustomDataType>,
1615 #[cfg_attr(feature = "serde", serde(rename = "energyAmount"))]
1619 pub energy_amount: i64,
1620 #[cfg_attr(feature = "serde", serde(rename = "evMaxCurrent"))]
1624 pub ev_max_current: i64,
1625 #[cfg_attr(feature = "serde", serde(rename = "evMaxVoltage"))]
1629 pub ev_max_voltage: i64,
1630 #[cfg_attr(feature = "serde", serde(rename = "evMinCurrent"))]
1634 pub ev_min_current: i64,
1635}
1636#[derive(Debug, Clone, PartialEq, Eq)]
1640#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1641pub struct DCChargingParameters<CustomDataType = crate::NoCustomData> {
1642 #[cfg_attr(feature = "serde", serde(rename = "bulkSoC"))]
1646 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1647 pub bulk_so_c: Option<i64>,
1648 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1649 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1650 pub custom_data: Option<CustomDataType>,
1651 #[cfg_attr(feature = "serde", serde(rename = "energyAmount"))]
1655 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1656 pub energy_amount: Option<i64>,
1657 #[cfg_attr(feature = "serde", serde(rename = "evEnergyCapacity"))]
1661 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1662 pub ev_energy_capacity: Option<i64>,
1663 #[cfg_attr(feature = "serde", serde(rename = "evMaxCurrent"))]
1667 pub ev_max_current: i64,
1668 #[cfg_attr(feature = "serde", serde(rename = "evMaxPower"))]
1672 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1673 pub ev_max_power: Option<i64>,
1674 #[cfg_attr(feature = "serde", serde(rename = "evMaxVoltage"))]
1678 pub ev_max_voltage: i64,
1679 #[cfg_attr(feature = "serde", serde(rename = "fullSoC"))]
1683 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1684 pub full_so_c: Option<i64>,
1685 #[cfg_attr(feature = "serde", serde(rename = "stateOfCharge"))]
1689 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1690 pub state_of_charge: Option<i64>,
1691}
1692#[derive(Debug, Clone, PartialEq, Eq)]
1696#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1697pub enum EnergyTransferModeEnum {
1698 DC,
1699 #[cfg_attr(feature = "serde", serde(rename = "AC_single_phase"))]
1700 ACsinglephase,
1701 #[cfg_attr(feature = "serde", serde(rename = "AC_two_phase"))]
1702 ACtwophase,
1703 #[cfg_attr(feature = "serde", serde(rename = "AC_three_phase"))]
1704 ACthreephase,
1705}
1706#[derive(Debug, Clone, PartialEq, Eq)]
1709#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1710pub struct ChargingNeeds<CustomDataType = crate::NoCustomData> {
1711 #[cfg_attr(feature = "serde", serde(rename = "acChargingParameters"))]
1712 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1713 pub ac_charging_parameters: Option<ACChargingParameters<CustomDataType>>,
1714 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1715 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1716 pub custom_data: Option<CustomDataType>,
1717 #[cfg_attr(feature = "serde", serde(rename = "dcChargingParameters"))]
1718 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1719 pub dc_charging_parameters: Option<DCChargingParameters<CustomDataType>>,
1720 #[cfg_attr(feature = "serde", serde(rename = "departureTime"))]
1724 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1725 pub departure_time: Option<crate::OcppTimestamp>,
1726 #[cfg_attr(feature = "serde", serde(rename = "requestedEnergyTransfer"))]
1727 pub requested_energy_transfer: EnergyTransferModeEnum,
1728}
1729#[derive(Debug, Clone, PartialEq, Eq)]
1731#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1732pub enum NotifyEVChargingNeedsStatusEnum {
1733 Accepted,
1734 Rejected,
1735 Processing,
1736}
1737#[derive(Debug, Clone, PartialEq, Eq)]
1739#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1740pub enum EventNotificationEnum {
1741 HardWiredNotification,
1742 HardWiredMonitor,
1743 PreconfiguredMonitor,
1744 CustomMonitor,
1745}
1746#[derive(Debug, Clone, PartialEq, Eq)]
1748#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1749pub enum EventTriggerEnum {
1750 Alerting,
1751 Delta,
1752 Periodic,
1753}
1754#[cfg(feature = "alloc")]
1755#[derive(Debug, Clone, PartialEq, Eq)]
1757#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1758pub struct EventData<CustomDataType = crate::NoCustomData> {
1759 #[cfg_attr(feature = "serde", serde(rename = "actualValue"))]
1763 pub actual_value: alloc::string::String,
1764 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1766 pub cause: Option<i64>,
1767 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1769 pub cleared: Option<bool>,
1770 pub component: Component<CustomDataType>,
1771 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1772 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1773 pub custom_data: Option<CustomDataType>,
1774 #[cfg_attr(feature = "serde", serde(rename = "eventId"))]
1776 pub event_id: i64,
1777 #[cfg_attr(feature = "serde", serde(rename = "eventNotificationType"))]
1778 pub event_notification_type: EventNotificationEnum,
1779 #[cfg_attr(feature = "serde", serde(rename = "techCode"))]
1781 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1782 pub tech_code: Option<heapless::String<50usize>>,
1783 #[cfg_attr(feature = "serde", serde(rename = "techInfo"))]
1785 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1786 pub tech_info: Option<heapless::String<500usize>>,
1787 pub timestamp: crate::OcppTimestamp,
1789 #[cfg_attr(feature = "serde", serde(rename = "transactionId"))]
1791 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1792 pub transaction_id: Option<heapless::String<36usize>>,
1793 pub trigger: EventTriggerEnum,
1794 pub variable: Variable<CustomDataType>,
1795 #[cfg_attr(feature = "serde", serde(rename = "variableMonitoringId"))]
1797 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1798 pub variable_monitoring_id: Option<i64>,
1799}
1800#[cfg(not(feature = "alloc"))]
1801#[derive(Debug, Clone, PartialEq, Eq)]
1803#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1804pub struct EventData<
1805 CustomDataType = crate::NoCustomData,
1806 const EVENT_DATA_ACTUAL_VALUE_CAP: usize = 1024usize,
1807> {
1808 #[cfg_attr(feature = "serde", serde(rename = "actualValue"))]
1812 pub actual_value: heapless::String<EVENT_DATA_ACTUAL_VALUE_CAP>,
1813 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1815 pub cause: Option<i64>,
1816 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1818 pub cleared: Option<bool>,
1819 pub component: Component<CustomDataType>,
1820 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1821 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1822 pub custom_data: Option<CustomDataType>,
1823 #[cfg_attr(feature = "serde", serde(rename = "eventId"))]
1825 pub event_id: i64,
1826 #[cfg_attr(feature = "serde", serde(rename = "eventNotificationType"))]
1827 pub event_notification_type: EventNotificationEnum,
1828 #[cfg_attr(feature = "serde", serde(rename = "techCode"))]
1830 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1831 pub tech_code: Option<heapless::String<50usize>>,
1832 #[cfg_attr(feature = "serde", serde(rename = "techInfo"))]
1834 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1835 pub tech_info: Option<heapless::String<500usize>>,
1836 pub timestamp: crate::OcppTimestamp,
1838 #[cfg_attr(feature = "serde", serde(rename = "transactionId"))]
1840 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1841 pub transaction_id: Option<heapless::String<36usize>>,
1842 pub trigger: EventTriggerEnum,
1843 pub variable: Variable<CustomDataType>,
1844 #[cfg_attr(feature = "serde", serde(rename = "variableMonitoringId"))]
1846 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1847 pub variable_monitoring_id: Option<i64>,
1848}
1849#[derive(Debug, Clone, PartialEq, Eq)]
1851#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1852pub enum MonitorEnum {
1853 UpperThreshold,
1854 LowerThreshold,
1855 Delta,
1856 Periodic,
1857 PeriodicClockAligned,
1858}
1859#[derive(Debug, Clone, PartialEq)]
1861#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1862pub struct VariableMonitoring<CustomDataType = crate::NoCustomData> {
1863 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1864 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1865 pub custom_data: Option<CustomDataType>,
1866 pub id: i64,
1868 pub severity: i64,
1892 pub transaction: bool,
1894 pub r#type: MonitorEnum,
1895 pub value: f64,
1898}
1899#[cfg(feature = "alloc")]
1900#[derive(Debug, Clone, PartialEq)]
1902#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1903pub struct MonitoringData<CustomDataType = crate::NoCustomData> {
1904 pub component: Component<CustomDataType>,
1905 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1906 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1907 pub custom_data: Option<CustomDataType>,
1908 pub variable: Variable<CustomDataType>,
1909 #[cfg_attr(feature = "serde", serde(rename = "variableMonitoring"))]
1910 pub variable_monitoring: alloc::vec::Vec<VariableMonitoring<CustomDataType>>,
1911}
1912#[cfg(not(feature = "alloc"))]
1913#[derive(Debug, Clone, PartialEq)]
1915#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1916pub struct MonitoringData<
1917 CustomDataType = crate::NoCustomData,
1918 const MONITORING_DATA_VARIABLE_MONITORING_CAP: usize = 8usize,
1919> {
1920 pub component: Component<CustomDataType>,
1921 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1922 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1923 pub custom_data: Option<CustomDataType>,
1924 pub variable: Variable<CustomDataType>,
1925 #[cfg_attr(feature = "serde", serde(rename = "variableMonitoring"))]
1926 pub variable_monitoring: heapless::Vec<
1927 VariableMonitoring<CustomDataType>,
1928 MONITORING_DATA_VARIABLE_MONITORING_CAP,
1929 >,
1930}
1931#[derive(Debug, Clone, PartialEq, Eq)]
1933#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1934pub enum MutabilityEnum {
1935 ReadOnly,
1936 WriteOnly,
1937 ReadWrite,
1938}
1939#[cfg(feature = "alloc")]
1940#[derive(Debug, Clone, PartialEq, Eq)]
1942#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1943pub struct VariableAttribute<CustomDataType = crate::NoCustomData> {
1944 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1946 pub constant: Option<bool>,
1947 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1948 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1949 pub custom_data: Option<CustomDataType>,
1950 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1951 pub mutability: Option<MutabilityEnum>,
1952 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1954 pub persistent: Option<bool>,
1955 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1956 pub r#type: Option<AttributeEnum>,
1957 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1961 pub value: Option<alloc::string::String>,
1962}
1963#[cfg(not(feature = "alloc"))]
1964#[derive(Debug, Clone, PartialEq, Eq)]
1966#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1967pub struct VariableAttribute<
1968 CustomDataType = crate::NoCustomData,
1969 const VARIABLE_ATTRIBUTE_VALUE_CAP: usize = 1024usize,
1970> {
1971 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1973 pub constant: Option<bool>,
1974 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1975 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1976 pub custom_data: Option<CustomDataType>,
1977 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1978 pub mutability: Option<MutabilityEnum>,
1979 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1981 pub persistent: Option<bool>,
1982 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1983 pub r#type: Option<AttributeEnum>,
1984 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1988 pub value: Option<heapless::String<VARIABLE_ATTRIBUTE_VALUE_CAP>>,
1989}
1990#[derive(Debug, Clone, PartialEq, Eq)]
1992#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1993pub enum DataEnum {
1994 #[cfg_attr(feature = "serde", serde(rename = "string"))]
1995 String,
1996 #[cfg_attr(feature = "serde", serde(rename = "decimal"))]
1997 Decimal,
1998 #[cfg_attr(feature = "serde", serde(rename = "integer"))]
1999 Integer,
2000 #[cfg_attr(feature = "serde", serde(rename = "dateTime"))]
2001 DateTime,
2002 #[cfg_attr(feature = "serde", serde(rename = "boolean"))]
2003 Boolean,
2004 OptionList,
2005 SequenceList,
2006 MemberList,
2007}
2008#[cfg(feature = "alloc")]
2009#[derive(Debug, Clone, PartialEq)]
2011#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2012pub struct VariableCharacteristics<CustomDataType = crate::NoCustomData> {
2013 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2014 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2015 pub custom_data: Option<CustomDataType>,
2016 #[cfg_attr(feature = "serde", serde(rename = "dataType"))]
2017 pub data_type: DataEnum,
2018 #[cfg_attr(feature = "serde", serde(rename = "maxLimit"))]
2020 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2021 pub max_limit: Option<f64>,
2022 #[cfg_attr(feature = "serde", serde(rename = "minLimit"))]
2024 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2025 pub min_limit: Option<f64>,
2026 #[cfg_attr(feature = "serde", serde(rename = "supportsMonitoring"))]
2028 pub supports_monitoring: bool,
2029 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2031 pub unit: Option<heapless::String<16usize>>,
2032 #[cfg_attr(feature = "serde", serde(rename = "valuesList"))]
2044 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2045 pub values_list: Option<alloc::string::String>,
2046}
2047#[cfg(not(feature = "alloc"))]
2048#[derive(Debug, Clone, PartialEq)]
2050#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2051pub struct VariableCharacteristics<
2052 CustomDataType = crate::NoCustomData,
2053 const VARIABLE_CHARACTERISTICS_VALUES_LIST_CAP: usize = 1000usize,
2054> {
2055 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2056 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2057 pub custom_data: Option<CustomDataType>,
2058 #[cfg_attr(feature = "serde", serde(rename = "dataType"))]
2059 pub data_type: DataEnum,
2060 #[cfg_attr(feature = "serde", serde(rename = "maxLimit"))]
2062 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2063 pub max_limit: Option<f64>,
2064 #[cfg_attr(feature = "serde", serde(rename = "minLimit"))]
2066 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2067 pub min_limit: Option<f64>,
2068 #[cfg_attr(feature = "serde", serde(rename = "supportsMonitoring"))]
2070 pub supports_monitoring: bool,
2071 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2073 pub unit: Option<heapless::String<16usize>>,
2074 #[cfg_attr(feature = "serde", serde(rename = "valuesList"))]
2086 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2087 pub values_list: Option<heapless::String<VARIABLE_CHARACTERISTICS_VALUES_LIST_CAP>>,
2088}
2089#[cfg(feature = "alloc")]
2090#[derive(Debug, Clone, PartialEq)]
2092#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2093pub struct ReportData<CustomDataType = crate::NoCustomData> {
2094 pub component: Component<CustomDataType>,
2095 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2096 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2097 pub custom_data: Option<CustomDataType>,
2098 pub variable: Variable<CustomDataType>,
2099 #[cfg_attr(feature = "serde", serde(rename = "variableAttribute"))]
2100 pub variable_attribute: heapless::Vec<VariableAttribute<CustomDataType>, 4usize>,
2101 #[cfg_attr(feature = "serde", serde(rename = "variableCharacteristics"))]
2102 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2103 pub variable_characteristics: Option<VariableCharacteristics<CustomDataType>>,
2104}
2105#[cfg(not(feature = "alloc"))]
2106#[derive(Debug, Clone, PartialEq)]
2108#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2109pub struct ReportData<
2110 CustomDataType = crate::NoCustomData,
2111 const VARIABLE_ATTRIBUTE_VALUE_CAP: usize = 1024usize,
2112 const VARIABLE_CHARACTERISTICS_VALUES_LIST_CAP: usize = 1000usize,
2113> {
2114 pub component: Component<CustomDataType>,
2115 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2116 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2117 pub custom_data: Option<CustomDataType>,
2118 pub variable: Variable<CustomDataType>,
2119 #[cfg_attr(feature = "serde", serde(rename = "variableAttribute"))]
2120 pub variable_attribute: heapless::Vec<
2121 VariableAttribute<CustomDataType, VARIABLE_ATTRIBUTE_VALUE_CAP>,
2122 4usize,
2123 >,
2124 #[cfg_attr(feature = "serde", serde(rename = "variableCharacteristics"))]
2125 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2126 pub variable_characteristics: Option<
2127 VariableCharacteristics<CustomDataType, VARIABLE_CHARACTERISTICS_VALUES_LIST_CAP>,
2128 >,
2129}
2130#[derive(Debug, Clone, PartialEq, Eq)]
2133#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2134pub enum PublishFirmwareStatusEnum {
2135 Idle,
2136 DownloadScheduled,
2137 Downloading,
2138 Downloaded,
2139 Published,
2140 DownloadFailed,
2141 DownloadPaused,
2142 InvalidChecksum,
2143 ChecksumVerified,
2144 PublishFailed,
2145}
2146#[derive(Debug, Clone, PartialEq, Eq)]
2150#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2151pub enum ChargingProfileKindEnum {
2152 Absolute,
2153 Recurring,
2154 Relative,
2155}
2156#[derive(Debug, Clone, PartialEq, Eq)]
2160#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2161pub enum RecurrencyKindEnum {
2162 Daily,
2163 Weekly,
2164}
2165#[cfg(feature = "alloc")]
2166#[derive(Debug, Clone, PartialEq)]
2170#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2171pub struct ChargingProfile<CustomDataType = crate::NoCustomData> {
2172 #[cfg_attr(feature = "serde", serde(rename = "chargingProfileKind"))]
2173 pub charging_profile_kind: ChargingProfileKindEnum,
2174 #[cfg_attr(feature = "serde", serde(rename = "chargingProfilePurpose"))]
2175 pub charging_profile_purpose: ChargingProfilePurposeEnum,
2176 #[cfg_attr(feature = "serde", serde(rename = "chargingSchedule"))]
2177 pub charging_schedule: heapless::Vec<ChargingSchedule<CustomDataType>, 3usize>,
2178 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2179 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2180 pub custom_data: Option<CustomDataType>,
2181 pub id: i64,
2185 #[cfg_attr(feature = "serde", serde(rename = "recurrencyKind"))]
2186 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2187 pub recurrency_kind: Option<RecurrencyKindEnum>,
2188 #[cfg_attr(feature = "serde", serde(rename = "stackLevel"))]
2192 pub stack_level: i64,
2193 #[cfg_attr(feature = "serde", serde(rename = "transactionId"))]
2195 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2196 pub transaction_id: Option<heapless::String<36usize>>,
2197 #[cfg_attr(feature = "serde", serde(rename = "validFrom"))]
2201 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2202 pub valid_from: Option<crate::OcppTimestamp>,
2203 #[cfg_attr(feature = "serde", serde(rename = "validTo"))]
2207 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2208 pub valid_to: Option<crate::OcppTimestamp>,
2209}
2210#[cfg(not(feature = "alloc"))]
2211#[derive(Debug, Clone, PartialEq)]
2215#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2216pub struct ChargingProfile<
2217 CustomDataType = crate::NoCustomData,
2218 const CHARGING_SCHEDULE_CHARGING_SCHEDULE_PERIOD_CAP: usize = 8usize,
2219 const SALES_TARIFF_SALES_TARIFF_ENTRY_CAP: usize = 8usize,
2220> {
2221 #[cfg_attr(feature = "serde", serde(rename = "chargingProfileKind"))]
2222 pub charging_profile_kind: ChargingProfileKindEnum,
2223 #[cfg_attr(feature = "serde", serde(rename = "chargingProfilePurpose"))]
2224 pub charging_profile_purpose: ChargingProfilePurposeEnum,
2225 #[cfg_attr(feature = "serde", serde(rename = "chargingSchedule"))]
2226 pub charging_schedule: heapless::Vec<
2227 ChargingSchedule<
2228 CustomDataType,
2229 CHARGING_SCHEDULE_CHARGING_SCHEDULE_PERIOD_CAP,
2230 SALES_TARIFF_SALES_TARIFF_ENTRY_CAP,
2231 >,
2232 3usize,
2233 >,
2234 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2235 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2236 pub custom_data: Option<CustomDataType>,
2237 pub id: i64,
2241 #[cfg_attr(feature = "serde", serde(rename = "recurrencyKind"))]
2242 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2243 pub recurrency_kind: Option<RecurrencyKindEnum>,
2244 #[cfg_attr(feature = "serde", serde(rename = "stackLevel"))]
2248 pub stack_level: i64,
2249 #[cfg_attr(feature = "serde", serde(rename = "transactionId"))]
2251 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2252 pub transaction_id: Option<heapless::String<36usize>>,
2253 #[cfg_attr(feature = "serde", serde(rename = "validFrom"))]
2257 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2258 pub valid_from: Option<crate::OcppTimestamp>,
2259 #[cfg_attr(feature = "serde", serde(rename = "validTo"))]
2263 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2264 pub valid_to: Option<crate::OcppTimestamp>,
2265}
2266#[derive(Debug, Clone, PartialEq, Eq)]
2268#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2269pub enum RequestStartStopStatusEnum {
2270 Accepted,
2271 Rejected,
2272}
2273#[derive(Debug, Clone, PartialEq, Eq)]
2275#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2276pub enum ReservationUpdateStatusEnum {
2277 Expired,
2278 Removed,
2279}
2280#[derive(Debug, Clone, PartialEq, Eq)]
2282#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2283pub enum ConnectorEnum {
2284 #[cfg_attr(feature = "serde", serde(rename = "cCCS1"))]
2285 CCCS1,
2286 #[cfg_attr(feature = "serde", serde(rename = "cCCS2"))]
2287 CCCS2,
2288 #[cfg_attr(feature = "serde", serde(rename = "cG105"))]
2289 CG105,
2290 #[cfg_attr(feature = "serde", serde(rename = "cTesla"))]
2291 CTesla,
2292 #[cfg_attr(feature = "serde", serde(rename = "cType1"))]
2293 CType1,
2294 #[cfg_attr(feature = "serde", serde(rename = "cType2"))]
2295 CType2,
2296 #[cfg_attr(feature = "serde", serde(rename = "s309-1P-16A"))]
2297 S3091P16A,
2298 #[cfg_attr(feature = "serde", serde(rename = "s309-1P-32A"))]
2299 S3091P32A,
2300 #[cfg_attr(feature = "serde", serde(rename = "s309-3P-16A"))]
2301 S3093P16A,
2302 #[cfg_attr(feature = "serde", serde(rename = "s309-3P-32A"))]
2303 S3093P32A,
2304 #[cfg_attr(feature = "serde", serde(rename = "sBS1361"))]
2305 SBS1361,
2306 #[cfg_attr(feature = "serde", serde(rename = "sCEE-7-7"))]
2307 SCEE77,
2308 #[cfg_attr(feature = "serde", serde(rename = "sType2"))]
2309 SType2,
2310 #[cfg_attr(feature = "serde", serde(rename = "sType3"))]
2311 SType3,
2312 Other1PhMax16A,
2313 Other1PhOver16A,
2314 Other3Ph,
2315 Pan,
2316 #[cfg_attr(feature = "serde", serde(rename = "wInductive"))]
2317 WInductive,
2318 #[cfg_attr(feature = "serde", serde(rename = "wResonant"))]
2319 WResonant,
2320 Undetermined,
2321 Unknown,
2322}
2323#[derive(Debug, Clone, PartialEq, Eq)]
2325#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2326pub enum ReserveNowStatusEnum {
2327 Accepted,
2328 Faulted,
2329 Occupied,
2330 Rejected,
2331 Unavailable,
2332}
2333#[derive(Debug, Clone, PartialEq, Eq)]
2335#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2336pub enum ResetEnum {
2337 Immediate,
2338 OnIdle,
2339}
2340#[derive(Debug, Clone, PartialEq, Eq)]
2342#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2343pub enum ResetStatusEnum {
2344 Accepted,
2345 Rejected,
2346 Scheduled,
2347}
2348#[cfg(feature = "alloc")]
2349#[derive(Debug, Clone, PartialEq, Eq)]
2351#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2352pub struct AuthorizationData<CustomDataType = crate::NoCustomData> {
2353 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2354 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2355 pub custom_data: Option<CustomDataType>,
2356 #[cfg_attr(feature = "serde", serde(rename = "idToken"))]
2357 pub id_token: IdToken<CustomDataType>,
2358 #[cfg_attr(feature = "serde", serde(rename = "idTokenInfo"))]
2359 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2360 pub id_token_info: Option<IdTokenInfo<CustomDataType>>,
2361}
2362#[cfg(not(feature = "alloc"))]
2363#[derive(Debug, Clone, PartialEq, Eq)]
2365#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2366pub struct AuthorizationData<
2367 CustomDataType = crate::NoCustomData,
2368 const ID_TOKEN_ADDITIONAL_INFO_CAP: usize = 8usize,
2369 const ID_TOKEN_INFO_EVSE_ID_CAP: usize = 8usize,
2370> {
2371 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2372 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2373 pub custom_data: Option<CustomDataType>,
2374 #[cfg_attr(feature = "serde", serde(rename = "idToken"))]
2375 pub id_token: IdToken<CustomDataType, ID_TOKEN_ADDITIONAL_INFO_CAP>,
2376 #[cfg_attr(feature = "serde", serde(rename = "idTokenInfo"))]
2377 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2378 pub id_token_info: Option<
2379 IdTokenInfo<
2380 CustomDataType,
2381 ID_TOKEN_INFO_EVSE_ID_CAP,
2382 ID_TOKEN_ADDITIONAL_INFO_CAP,
2383 >,
2384 >,
2385}
2386#[derive(Debug, Clone, PartialEq, Eq)]
2388#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2389pub enum UpdateEnum {
2390 Differential,
2391 Full,
2392}
2393#[derive(Debug, Clone, PartialEq, Eq)]
2395#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2396pub enum SendLocalListStatusEnum {
2397 Accepted,
2398 Failed,
2399 VersionMismatch,
2400}
2401#[derive(Debug, Clone, PartialEq, Eq)]
2403#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2404pub enum ChargingProfileStatusEnum {
2405 Accepted,
2406 Rejected,
2407}
2408#[derive(Debug, Clone, PartialEq, Eq)]
2410#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2411pub enum DisplayMessageStatusEnum {
2412 Accepted,
2413 NotSupportedMessageFormat,
2414 Rejected,
2415 NotSupportedPriority,
2416 NotSupportedState,
2417 UnknownTransaction,
2418}
2419#[derive(Debug, Clone, PartialEq, Eq)]
2421#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2422pub enum MonitoringBaseEnum {
2423 All,
2424 FactoryDefault,
2425 HardWiredOnly,
2426}
2427#[derive(Debug, Clone, PartialEq, Eq)]
2431#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2432pub enum APNAuthenticationEnum {
2433 CHAP,
2434 NONE,
2435 PAP,
2436 AUTO,
2437}
2438#[derive(Debug, Clone, PartialEq, Eq)]
2444#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2445pub struct APN<CustomDataType = crate::NoCustomData> {
2446 pub apn: heapless::String<512usize>,
2450 #[cfg_attr(feature = "serde", serde(rename = "apnAuthentication"))]
2451 pub apn_authentication: APNAuthenticationEnum,
2452 #[cfg_attr(feature = "serde", serde(rename = "apnPassword"))]
2456 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2457 pub apn_password: Option<heapless::String<20usize>>,
2458 #[cfg_attr(feature = "serde", serde(rename = "apnUserName"))]
2462 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2463 pub apn_user_name: Option<heapless::String<20usize>>,
2464 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2465 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2466 pub custom_data: Option<CustomDataType>,
2467 #[cfg_attr(feature = "serde", serde(rename = "preferredNetwork"))]
2471 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2472 pub preferred_network: Option<heapless::String<6usize>>,
2473 #[cfg_attr(feature = "serde", serde(rename = "simPin"))]
2477 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2478 pub sim_pin: Option<i64>,
2479 #[cfg_attr(feature = "serde", serde(rename = "useOnlyPreferredNetwork"))]
2484 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2485 pub use_only_preferred_network: Option<bool>,
2486}
2487#[derive(Debug, Clone, PartialEq, Eq)]
2489#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2490pub enum OCPPInterfaceEnum {
2491 Wired0,
2492 Wired1,
2493 Wired2,
2494 Wired3,
2495 Wireless0,
2496 Wireless1,
2497 Wireless2,
2498 Wireless3,
2499}
2500#[derive(Debug, Clone, PartialEq, Eq)]
2504#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2505pub enum OCPPTransportEnum {
2506 JSON,
2507 SOAP,
2508}
2509#[derive(Debug, Clone, PartialEq, Eq)]
2513#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2514pub enum OCPPVersionEnum {
2515 OCPP12,
2516 OCPP15,
2517 OCPP16,
2518 OCPP20,
2519}
2520#[derive(Debug, Clone, PartialEq, Eq)]
2524#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2525pub enum VPNEnum {
2526 IKEv2,
2527 IPSec,
2528 L2TP,
2529 PPTP,
2530}
2531#[derive(Debug, Clone, PartialEq, Eq)]
2535#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2536pub struct VPN<CustomDataType = crate::NoCustomData> {
2537 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2538 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2539 pub custom_data: Option<CustomDataType>,
2540 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2544 pub group: Option<heapless::String<20usize>>,
2545 pub key: heapless::String<255usize>,
2549 pub password: heapless::String<20usize>,
2553 pub server: heapless::String<512usize>,
2557 pub r#type: VPNEnum,
2558 pub user: heapless::String<20usize>,
2562}
2563#[derive(Debug, Clone, PartialEq, Eq)]
2567#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2568pub struct NetworkConnectionProfile<CustomDataType = crate::NoCustomData> {
2569 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2570 pub apn: Option<APN<CustomDataType>>,
2571 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2572 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2573 pub custom_data: Option<CustomDataType>,
2574 #[cfg_attr(feature = "serde", serde(rename = "messageTimeout"))]
2578 pub message_timeout: i64,
2579 #[cfg_attr(feature = "serde", serde(rename = "ocppCsmsUrl"))]
2583 pub ocpp_csms_url: heapless::String<512usize>,
2584 #[cfg_attr(feature = "serde", serde(rename = "ocppInterface"))]
2585 pub ocpp_interface: OCPPInterfaceEnum,
2586 #[cfg_attr(feature = "serde", serde(rename = "ocppTransport"))]
2587 pub ocpp_transport: OCPPTransportEnum,
2588 #[cfg_attr(feature = "serde", serde(rename = "ocppVersion"))]
2589 pub ocpp_version: OCPPVersionEnum,
2590 #[cfg_attr(feature = "serde", serde(rename = "securityProfile"))]
2592 pub security_profile: i64,
2593 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2594 pub vpn: Option<VPN<CustomDataType>>,
2595}
2596#[derive(Debug, Clone, PartialEq, Eq)]
2598#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2599pub enum SetNetworkProfileStatusEnum {
2600 Accepted,
2601 Rejected,
2602 Failed,
2603}
2604#[derive(Debug, Clone, PartialEq)]
2606#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2607pub struct SetMonitoringData<CustomDataType = crate::NoCustomData> {
2608 pub component: Component<CustomDataType>,
2609 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2610 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2611 pub custom_data: Option<CustomDataType>,
2612 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2614 pub id: Option<i64>,
2615 pub severity: i64,
2639 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2641 pub transaction: Option<bool>,
2642 pub r#type: MonitorEnum,
2643 pub value: f64,
2646 pub variable: Variable<CustomDataType>,
2647}
2648#[derive(Debug, Clone, PartialEq, Eq)]
2650#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2651pub enum SetMonitoringStatusEnum {
2652 Accepted,
2653 UnknownComponent,
2654 UnknownVariable,
2655 UnsupportedMonitorType,
2656 Rejected,
2657 Duplicate,
2658}
2659#[derive(Debug, Clone, PartialEq, Eq)]
2661#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2662pub struct SetMonitoringResult<CustomDataType = crate::NoCustomData> {
2663 pub component: Component<CustomDataType>,
2664 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2665 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2666 pub custom_data: Option<CustomDataType>,
2667 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2669 pub id: Option<i64>,
2670 pub severity: i64,
2694 pub status: SetMonitoringStatusEnum,
2695 #[cfg_attr(feature = "serde", serde(rename = "statusInfo"))]
2696 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2697 pub status_info: Option<StatusInfo<CustomDataType>>,
2698 pub r#type: MonitorEnum,
2699 pub variable: Variable<CustomDataType>,
2700}
2701#[cfg(feature = "alloc")]
2702#[derive(Debug, Clone, PartialEq, Eq)]
2703#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2704pub struct SetVariableData<CustomDataType = crate::NoCustomData> {
2705 #[cfg_attr(feature = "serde", serde(rename = "attributeType"))]
2706 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2707 pub attribute_type: Option<AttributeEnum>,
2708 #[cfg_attr(feature = "serde", serde(rename = "attributeValue"))]
2712 pub attribute_value: alloc::string::String,
2713 pub component: Component<CustomDataType>,
2714 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2715 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2716 pub custom_data: Option<CustomDataType>,
2717 pub variable: Variable<CustomDataType>,
2718}
2719#[cfg(not(feature = "alloc"))]
2720#[derive(Debug, Clone, PartialEq, Eq)]
2721#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2722pub struct SetVariableData<
2723 CustomDataType = crate::NoCustomData,
2724 const SET_VARIABLE_DATA_ATTRIBUTE_VALUE_CAP: usize = 1000usize,
2725> {
2726 #[cfg_attr(feature = "serde", serde(rename = "attributeType"))]
2727 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2728 pub attribute_type: Option<AttributeEnum>,
2729 #[cfg_attr(feature = "serde", serde(rename = "attributeValue"))]
2733 pub attribute_value: heapless::String<SET_VARIABLE_DATA_ATTRIBUTE_VALUE_CAP>,
2734 pub component: Component<CustomDataType>,
2735 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2736 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2737 pub custom_data: Option<CustomDataType>,
2738 pub variable: Variable<CustomDataType>,
2739}
2740#[derive(Debug, Clone, PartialEq, Eq)]
2742#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2743pub enum SetVariableStatusEnum {
2744 Accepted,
2745 Rejected,
2746 UnknownComponent,
2747 UnknownVariable,
2748 NotSupportedAttributeType,
2749 RebootRequired,
2750}
2751#[derive(Debug, Clone, PartialEq, Eq)]
2752#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2753pub struct SetVariableResult<CustomDataType = crate::NoCustomData> {
2754 #[cfg_attr(feature = "serde", serde(rename = "attributeStatus"))]
2755 pub attribute_status: SetVariableStatusEnum,
2756 #[cfg_attr(feature = "serde", serde(rename = "attributeStatusInfo"))]
2757 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2758 pub attribute_status_info: Option<StatusInfo<CustomDataType>>,
2759 #[cfg_attr(feature = "serde", serde(rename = "attributeType"))]
2760 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2761 pub attribute_type: Option<AttributeEnum>,
2762 pub component: Component<CustomDataType>,
2763 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2764 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2765 pub custom_data: Option<CustomDataType>,
2766 pub variable: Variable<CustomDataType>,
2767}
2768#[derive(Debug, Clone, PartialEq, Eq)]
2770#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2771pub enum ConnectorStatusEnum {
2772 Available,
2773 Occupied,
2774 Reserved,
2775 Unavailable,
2776 Faulted,
2777}
2778#[derive(Debug, Clone, PartialEq, Eq)]
2781#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2782pub enum TransactionEventEnum {
2783 Ended,
2784 Started,
2785 Updated,
2786}
2787#[derive(Debug, Clone, PartialEq, Eq)]
2792#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2793pub enum ChargingStateEnum {
2794 Charging,
2795 EVConnected,
2796 SuspendedEV,
2797 SuspendedEVSE,
2798 Idle,
2799}
2800#[derive(Debug, Clone, PartialEq, Eq)]
2804#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2805pub enum ReasonEnum {
2806 DeAuthorized,
2807 EmergencyStop,
2808 EnergyLimitReached,
2809 EVDisconnected,
2810 GroundFault,
2811 ImmediateReset,
2812 Local,
2813 LocalOutOfCredit,
2814 MasterPass,
2815 Other,
2816 OvercurrentFault,
2817 PowerLoss,
2818 PowerQuality,
2819 Reboot,
2820 Remote,
2821 SOCLimitReached,
2822 StoppedByEV,
2823 TimeLimitReached,
2824 Timeout,
2825}
2826#[derive(Debug, Clone, PartialEq, Eq)]
2829#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2830pub struct Transaction<CustomDataType = crate::NoCustomData> {
2831 #[cfg_attr(feature = "serde", serde(rename = "chargingState"))]
2832 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2833 pub charging_state: Option<ChargingStateEnum>,
2834 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2835 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2836 pub custom_data: Option<CustomDataType>,
2837 #[cfg_attr(feature = "serde", serde(rename = "remoteStartId"))]
2839 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2840 pub remote_start_id: Option<i64>,
2841 #[cfg_attr(feature = "serde", serde(rename = "stoppedReason"))]
2842 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2843 pub stopped_reason: Option<ReasonEnum>,
2844 #[cfg_attr(feature = "serde", serde(rename = "timeSpentCharging"))]
2848 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2849 pub time_spent_charging: Option<i64>,
2850 #[cfg_attr(feature = "serde", serde(rename = "transactionId"))]
2852 pub transaction_id: heapless::String<36usize>,
2853}
2854#[derive(Debug, Clone, PartialEq, Eq)]
2856#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2857pub enum TriggerReasonEnum {
2858 Authorized,
2859 CablePluggedIn,
2860 ChargingRateChanged,
2861 ChargingStateChanged,
2862 Deauthorized,
2863 EnergyLimitReached,
2864 EVCommunicationLost,
2865 EVConnectTimeout,
2866 MeterValueClock,
2867 MeterValuePeriodic,
2868 TimeLimitReached,
2869 Trigger,
2870 UnlockCommand,
2871 StopAuthorized,
2872 EVDeparted,
2873 EVDetected,
2874 RemoteStop,
2875 RemoteStart,
2876 AbnormalCondition,
2877 SignedDataReceived,
2878 ResetCommand,
2879}
2880#[derive(Debug, Clone, PartialEq, Eq)]
2882#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2883pub enum MessageTriggerEnum {
2884 BootNotification,
2885 LogStatusNotification,
2886 FirmwareStatusNotification,
2887 Heartbeat,
2888 MeterValues,
2889 SignChargingStationCertificate,
2890 SignV2GCertificate,
2891 StatusNotification,
2892 TransactionEvent,
2893 SignCombinedCertificate,
2894 PublishFirmwareStatusNotification,
2895}
2896#[derive(Debug, Clone, PartialEq, Eq)]
2898#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2899pub enum TriggerMessageStatusEnum {
2900 Accepted,
2901 Rejected,
2902 NotImplemented,
2903}
2904#[derive(Debug, Clone, PartialEq, Eq)]
2906#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2907pub enum UnlockStatusEnum {
2908 Unlocked,
2909 UnlockFailed,
2910 OngoingAuthorizedTransaction,
2911 UnknownConnector,
2912}
2913#[derive(Debug, Clone, PartialEq, Eq)]
2915#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2916pub enum UnpublishFirmwareStatusEnum {
2917 DownloadOngoing,
2918 NoFirmware,
2919 Unpublished,
2920}
2921#[cfg(feature = "alloc")]
2922#[derive(Debug, Clone, PartialEq, Eq)]
2926#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2927pub struct Firmware<CustomDataType = crate::NoCustomData> {
2928 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2929 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2930 pub custom_data: Option<CustomDataType>,
2931 #[cfg_attr(feature = "serde", serde(rename = "installDateTime"))]
2935 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2936 pub install_date_time: Option<crate::OcppTimestamp>,
2937 pub location: heapless::String<512usize>,
2941 #[cfg_attr(feature = "serde", serde(rename = "retrieveDateTime"))]
2945 pub retrieve_date_time: crate::OcppTimestamp,
2946 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2950 pub signature: Option<alloc::string::String>,
2951 #[cfg_attr(feature = "serde", serde(rename = "signingCertificate"))]
2954 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2955 pub signing_certificate: Option<alloc::string::String>,
2956}
2957#[cfg(not(feature = "alloc"))]
2958#[derive(Debug, Clone, PartialEq, Eq)]
2962#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2963pub struct Firmware<
2964 CustomDataType = crate::NoCustomData,
2965 const FIRMWARE_SIGNATURE_CAP: usize = 800usize,
2966 const FIRMWARE_SIGNING_CERTIFICATE_CAP: usize = 1024usize,
2967> {
2968 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2969 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2970 pub custom_data: Option<CustomDataType>,
2971 #[cfg_attr(feature = "serde", serde(rename = "installDateTime"))]
2975 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2976 pub install_date_time: Option<crate::OcppTimestamp>,
2977 pub location: heapless::String<512usize>,
2981 #[cfg_attr(feature = "serde", serde(rename = "retrieveDateTime"))]
2985 pub retrieve_date_time: crate::OcppTimestamp,
2986 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2990 pub signature: Option<heapless::String<FIRMWARE_SIGNATURE_CAP>>,
2991 #[cfg_attr(feature = "serde", serde(rename = "signingCertificate"))]
2994 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2995 pub signing_certificate: Option<heapless::String<FIRMWARE_SIGNING_CERTIFICATE_CAP>>,
2996}
2997#[derive(Debug, Clone, PartialEq, Eq)]
2999#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
3000pub enum UpdateFirmwareStatusEnum {
3001 Accepted,
3002 Rejected,
3003 AcceptedCanceled,
3004 InvalidCertificate,
3005 RevokedCertificate,
3006}