1use serde::{Serialize, Deserialize};
15
16#[derive(Serialize, Deserialize)]
17pub struct V221 {
18 active_charging_profile: Option<ActiveChargingProfile>,
19
20 active_charging_profile_result: Option<ActiveChargingProfileResult>,
21
22 authorization_info: Option<AuthorizationInfo>,
23
24 cancel_reservation: Option<CancelReservation>,
25
26 cdr: Option<Cdr>,
27
28 charging_preferences: Option<ChargingPreferences>,
29
30 charging_profile: Option<ChargingProfile>,
31
32 charging_profile_response: Option<ChargingProfileResponse>,
33
34 charging_profile_result: Option<ChargingProfileResult>,
35
36 clear_profile_result: Option<ClearProfileResult>,
37
38 command_response: Option<CommandResponse>,
39
40 command_result: Option<CommandResult>,
41
42 connector: Option<Connector>,
43
44 credentials: Option<Credentials>,
45
46 endpoint: Option<Endpoint>,
47
48 evse: Option<Evse>,
49
50 hub_client_info: Option<HubClientInfo>,
51
52 location: Option<Location>,
53
54 location_references: Option<LocationReferences>,
55
56 reserve_now: Option<ReserveNow>,
57
58 session: Option<Session>,
59
60 set_charging_profile: Option<SetChargingProfile>,
61
62 start_session: Option<StartSession>,
63
64 stop_session: Option<StopSession>,
65
66 tariff: Option<Tariff>,
67
68 token: Option<Token>,
69
70 unlock_connector: Option<UnlockConnector>,
71
72 version: Option<Version>,
73
74 version_details: Option<VersionDetails>,
75}
76
77#[derive(Serialize, Deserialize)]
78pub struct ActiveChargingProfile {
79 charging_profile: ChargingProfile,
80
81 start_date_time: String,
82}
83
84#[derive(Serialize, Deserialize)]
85pub struct ChargingProfile {
86 charging_profile_period: Option<Vec<ChargingProfilePeriod>>,
87
88 charging_rate_unit: ChargingRateUnit,
89
90 duration: Option<i64>,
91
92 min_charging_rate: Option<f64>,
93
94 start_date_time: Option<String>,
95}
96
97#[derive(Serialize, Deserialize)]
98pub struct ChargingProfilePeriod {
99 limit: f64,
100
101 start_period: i64,
102}
103
104#[derive(Serialize, Deserialize)]
105pub enum ChargingRateUnit {
106 A,
107
108 W,
109}
110
111#[derive(Serialize, Deserialize)]
112pub struct ActiveChargingProfileResult {
113 profile: Option<ActiveChargingProfile>,
114
115 result: ChargingProfileResultType,
116}
117
118#[derive(Serialize, Deserialize)]
119pub enum ChargingProfileResultType {
120 #[serde(rename = "ACCEPTED")]
121 Accepted,
122
123 #[serde(rename = "REJECTED")]
124 Rejected,
125
126 #[serde(rename = "UNKNOWN")]
127 Unknown,
128}
129
130#[derive(Serialize, Deserialize)]
131pub struct AuthorizationInfo {
132 allowed: AllowedType,
133
134 authorization_reference: Option<String>,
135
136 info: Option<DisplayText>,
137
138 location: Option<LocationReferences>,
139
140 token: Token,
141}
142
143#[derive(Serialize, Deserialize)]
144#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
145pub enum AllowedType {
146 Allowed,
147
148 Blocked,
149
150 Expired,
151
152 #[serde(rename = "NO_CREDIT")]
153 NoCredit,
154
155 #[serde(rename = "NOT_ALLOWED")]
156 NotAllowed,
157}
158
159#[derive(Serialize, Deserialize)]
160pub struct DisplayText {
161 language: String,
162
163 text: String,
164}
165
166#[derive(Serialize, Deserialize)]
167pub struct LocationReferences {
168 evse_uids: Option<Vec<String>>,
169
170 location_id: String,
171}
172
173#[derive(Serialize, Deserialize)]
174pub struct Token {
175 contract_id: String,
176
177 country_code: String,
178
179 default_profile_type: Option<ProfileType>,
180
181 energy_contract: Option<EnergyContract>,
182
183 group_id: Option<String>,
184
185 issuer: String,
186
187 language: Option<String>,
188
189 last_updated: String,
190
191 party_id: String,
192
193 #[serde(rename = "type")]
194 token_type: TokenType,
195
196 uid: String,
197
198 valid: bool,
199
200 visual_number: Option<String>,
201
202 whitelist: WhitelistType,
203}
204
205#[derive(Serialize, Deserialize)]
206pub enum ProfileType {
207 #[serde(rename = "CHEAP")]
208 Cheap,
209
210 #[serde(rename = "FAST")]
211 Fast,
212
213 #[serde(rename = "GREEN")]
214 Green,
215
216 #[serde(rename = "REGULAR")]
217 Regular,
218}
219
220#[derive(Serialize, Deserialize)]
221pub struct EnergyContract {
222 contract_id: Option<String>,
223
224 supplier_name: String,
225}
226
227#[derive(Serialize, Deserialize)]
228#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
229pub enum TokenType {
230 #[serde(rename = "AD_HOC_USER")]
231 AdHocUser,
232
233 #[serde(rename = "APP_USER")]
234 AppUser,
235
236 Other,
237
238 Rfid,
239}
240
241#[derive(Serialize, Deserialize)]
242#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
243pub enum WhitelistType {
244 Allowed,
245
246 #[serde(rename = "ALLOWED_OFFLINE")]
247 AllowedOffline,
248
249 Always,
250
251 Never,
252}
253
254#[derive(Serialize, Deserialize)]
255pub struct CancelReservation {
256 reservation_id: String,
257
258 response_url: String,
259}
260
261#[derive(Serialize, Deserialize)]
262pub struct Cdr {
263 auth_method: AuthMethod,
264
265 authorization_reference: Option<String>,
266
267 cdr_location: CdrLocation,
268
269 cdr_token: CdrToken,
270
271 charging_periods: Vec<ChargingPeriod>,
272
273 country_code: String,
274
275 credit: Option<bool>,
276
277 credit_reference_id: Option<String>,
278
279 currency: String,
280
281 end_date_time: String,
282
283 home_charging_compensation: Option<bool>,
284
285 id: String,
286
287 invoice_reference_id: Option<String>,
288
289 last_updated: String,
290
291 meter_id: Option<String>,
292
293 party_id: String,
294
295 remark: Option<String>,
296
297 session_id: Option<String>,
298
299 signed_data: Option<SignedData>,
300
301 start_date_time: String,
302
303 tariffs: Option<Vec<Tariff>>,
304
305 total_cost: Price,
306
307 total_energy: f64,
308
309 total_energy_cost: Option<Price>,
310
311 total_fixed_cost: Option<Price>,
312
313 total_parking_cost: Option<Price>,
314
315 total_parking_time: Option<f64>,
316
317 total_reservation_cost: Option<Price>,
318
319 total_time: f64,
320
321 total_time_cost: Option<Price>,
322}
323
324#[derive(Serialize, Deserialize)]
325#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
326pub enum AuthMethod {
327 #[serde(rename = "AUTH_REQUEST")]
328 AuthRequest,
329
330 Command,
331
332 Whitelist,
333}
334
335#[derive(Serialize, Deserialize)]
336pub struct CdrLocation {
337 address: String,
338
339 city: String,
340
341 connector_format: ConnectorFormat,
342
343 connector_id: String,
344
345 connector_power_type: PowerType,
346
347 connector_standard: ConnectorType,
348
349 coordinates: GeoLocation,
350
351 country: String,
352
353 evse_id: String,
354
355 evse_uid: String,
356
357 id: String,
358
359 name: Option<String>,
360
361 postal_code: Option<String>,
362
363 state: Option<String>,
364}
365
366#[derive(Serialize, Deserialize)]
367pub enum ConnectorFormat {
368 #[serde(rename = "CABLE")]
369 Cable,
370
371 #[serde(rename = "SOCKET")]
372 Socket,
373}
374
375#[derive(Serialize, Deserialize)]
376#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
377pub enum PowerType {
378 #[serde(rename = "AC_1_PHASE")]
379 Ac1_Phase,
380
381 #[serde(rename = "AC_2_PHASE")]
382 Ac2_Phase,
383
384 #[serde(rename = "AC_2_PHASE_SPLIT")]
385 Ac2_PhaseSplit,
386
387 #[serde(rename = "AC_3_PHASE")]
388 Ac3_Phase,
389
390 Dc,
391}
392
393#[derive(Serialize, Deserialize)]
394#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
395pub enum ConnectorType {
396 Chademo,
397
398 Chaoji,
399
400 #[serde(rename = "DOMESTIC_A")]
401 DomesticA,
402
403 #[serde(rename = "DOMESTIC_B")]
404 DomesticB,
405
406 #[serde(rename = "DOMESTIC_C")]
407 DomesticC,
408
409 #[serde(rename = "DOMESTIC_D")]
410 DomesticD,
411
412 #[serde(rename = "DOMESTIC_E")]
413 DomesticE,
414
415 #[serde(rename = "DOMESTIC_F")]
416 DomesticF,
417
418 #[serde(rename = "DOMESTIC_G")]
419 DomesticG,
420
421 #[serde(rename = "DOMESTIC_H")]
422 DomesticH,
423
424 #[serde(rename = "DOMESTIC_I")]
425 DomesticI,
426
427 #[serde(rename = "DOMESTIC_J")]
428 DomesticJ,
429
430 #[serde(rename = "DOMESTIC_K")]
431 DomesticK,
432
433 #[serde(rename = "DOMESTIC_L")]
434 DomesticL,
435
436 #[serde(rename = "DOMESTIC_M")]
437 DomesticM,
438
439 #[serde(rename = "DOMESTIC_N")]
440 DomesticN,
441
442 #[serde(rename = "DOMESTIC_O")]
443 DomesticO,
444
445 #[serde(rename = "GBT_AC")]
446 GbtAc,
447
448 #[serde(rename = "GBT_DC")]
449 GbtDc,
450
451 #[serde(rename = "IEC_60309_2_single_16")]
452 Iec60309_2_Single16,
453
454 #[serde(rename = "IEC_60309_2_three_16")]
455 Iec60309_2_Three16,
456
457 #[serde(rename = "IEC_60309_2_three_32")]
458 Iec60309_2_Three32,
459
460 #[serde(rename = "IEC_60309_2_three_64")]
461 Iec60309_2_Three64,
462
463 #[serde(rename = "IEC_62196_T1")]
464 Iec62196_T1,
465
466 #[serde(rename = "IEC_62196_T1_COMBO")]
467 Iec62196_T1Combo,
468
469 #[serde(rename = "IEC_62196_T2")]
470 Iec62196_T2,
471
472 #[serde(rename = "IEC_62196_T2_COMBO")]
473 Iec62196_T2Combo,
474
475 #[serde(rename = "IEC_62196_T3A")]
476 Iec62196_T3A,
477
478 #[serde(rename = "IEC_62196_T3C")]
479 Iec62196_T3C,
480
481 #[serde(rename = "NEMA_10_30")]
482 Nema10_30,
483
484 #[serde(rename = "NEMA_10_50")]
485 Nema10_50,
486
487 #[serde(rename = "NEMA_14_30")]
488 Nema14_30,
489
490 #[serde(rename = "NEMA_14_50")]
491 Nema14_50,
492
493 #[serde(rename = "NEMA_5_20")]
494 Nema5_20,
495
496 #[serde(rename = "NEMA_6_30")]
497 Nema6_30,
498
499 #[serde(rename = "NEMA_6_50")]
500 Nema6_50,
501
502 #[serde(rename = "PANTOGRAPH_BOTTOM_UP")]
503 PantographBottomUp,
504
505 #[serde(rename = "PANTOGRAPH_TOP_DOWN")]
506 PantographTopDown,
507
508 #[serde(rename = "TESLA_R")]
509 TeslaR,
510
511 #[serde(rename = "TESLA_S")]
512 TeslaS,
513}
514
515#[derive(Serialize, Deserialize)]
516pub struct GeoLocation {
517 latitude: String,
518
519 longitude: String,
520}
521
522#[derive(Serialize, Deserialize)]
523pub struct CdrToken {
524 contract_id: String,
525
526 country_code: String,
527
528 party_id: String,
529
530 #[serde(rename = "type")]
531 cdr_token_type: TokenType,
532
533 uid: String,
534}
535
536#[derive(Serialize, Deserialize)]
537pub struct ChargingPeriod {
538 dimensions: Vec<CdrDimension>,
539
540 start_date_time: String,
541
542 tariff_id: Option<String>,
543}
544
545#[derive(Serialize, Deserialize)]
546pub struct CdrDimension {
547 #[serde(rename = "type")]
548 cdr_dimension_type: CdrDimensionType,
549
550 volume: f64,
551}
552
553#[derive(Serialize, Deserialize)]
554#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
555pub enum CdrDimensionType {
556 Current,
557
558 Energy,
559
560 #[serde(rename = "ENERGY_EXPORT")]
561 EnergyExport,
562
563 #[serde(rename = "ENERGY_IMPORT")]
564 EnergyImport,
565
566 #[serde(rename = "MAX_CURRENT")]
567 MaxCurrent,
568
569 #[serde(rename = "MAX_POWER")]
570 MaxPower,
571
572 #[serde(rename = "MIN_CURRENT")]
573 MinCurrent,
574
575 #[serde(rename = "MIN_POWER")]
576 MinPower,
577
578 #[serde(rename = "PARKING_TIME")]
579 ParkingTime,
580
581 Power,
582
583 #[serde(rename = "RESERVATION_TIME")]
584 ReservationTime,
585
586 #[serde(rename = "STATE_OF_CHARGE")]
587 StateOfCharge,
588
589 Time,
590}
591
592#[derive(Serialize, Deserialize)]
593pub struct SignedData {
594 encoding_method: String,
595
596 encoding_method_version: Option<i64>,
597
598 public_key: Option<String>,
599
600 signed_values: Vec<SignedValue>,
601
602 url: Option<String>,
603}
604
605#[derive(Serialize, Deserialize)]
606pub struct SignedValue {
607 nature: String,
608
609 plain_data: String,
610
611 signed_data: String,
612}
613
614#[derive(Serialize, Deserialize)]
615pub struct Tariff {
616 country_code: String,
617
618 currency: String,
619
620 elements: Vec<TariffElement>,
621
622 end_date_time: Option<String>,
623
624 energy_mix: Option<EnergyMix>,
625
626 id: String,
627
628 last_updated: String,
629
630 max_price: Option<Price>,
631
632 min_price: Option<Price>,
633
634 party_id: String,
635
636 start_date_time: Option<String>,
637
638 tariff_alt_text: Option<Vec<DisplayText>>,
639
640 tariff_alt_url: Option<String>,
641
642 #[serde(rename = "type")]
643 tariff_type: Option<TariffType>,
644}
645
646#[derive(Serialize, Deserialize)]
647pub struct TariffElement {
648 price_components: Vec<PriceComponent>,
649
650 restrictions: Option<TariffRestrictions>,
651}
652
653#[derive(Serialize, Deserialize)]
654pub struct PriceComponent {
655 price: f64,
656
657 step_size: i64,
658
659 #[serde(rename = "type")]
660 price_component_type: TariffDimensionType,
661
662 vat: Option<f64>,
663}
664
665#[derive(Serialize, Deserialize)]
666#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
667pub enum TariffDimensionType {
668 Energy,
669
670 Flat,
671
672 #[serde(rename = "PARKING_TIME")]
673 ParkingTime,
674
675 Time,
676}
677
678#[derive(Serialize, Deserialize)]
679pub struct TariffRestrictions {
680 day_of_week: Option<Vec<DayOfWeek>>,
681
682 end_date: Option<String>,
683
684 end_time: Option<String>,
685
686 max_current: Option<f64>,
687
688 max_duration: Option<i64>,
689
690 max_kwh: Option<f64>,
691
692 max_power: Option<f64>,
693
694 min_current: Option<f64>,
695
696 min_duration: Option<i64>,
697
698 min_kwh: Option<f64>,
699
700 min_power: Option<f64>,
701
702 reservation: Option<ReservationRestrictionType>,
703
704 start_date: Option<String>,
705
706 start_time: Option<String>,
707}
708
709#[derive(Serialize, Deserialize)]
710pub enum DayOfWeek {
711 #[serde(rename = "FRIDAY")]
712 Friday,
713
714 #[serde(rename = "MONDAY")]
715 Monday,
716
717 #[serde(rename = "SATURDAY")]
718 Saturday,
719
720 #[serde(rename = "SUNDAY")]
721 Sunday,
722
723 #[serde(rename = "THURSDAY")]
724 Thursday,
725
726 #[serde(rename = "TUESDAY")]
727 Tuesday,
728
729 #[serde(rename = "WEDNESDAY")]
730 Wednesday,
731}
732
733#[derive(Serialize, Deserialize)]
734#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
735pub enum ReservationRestrictionType {
736 Reservation,
737
738 #[serde(rename = "RESERVATION_EXPIRES")]
739 ReservationExpires,
740}
741
742#[derive(Serialize, Deserialize)]
743pub struct EnergyMix {
744 energy_product_name: Option<String>,
745
746 energy_sources: Option<Vec<EnergySource>>,
747
748 environ_impact: Option<Vec<EnvironmentalImpact>>,
749
750 is_green_energy: bool,
751
752 supplier_name: Option<String>,
753}
754
755#[derive(Serialize, Deserialize)]
756pub struct EnergySource {
757 percentage: f64,
758
759 source: EnergySourceCategory,
760}
761
762#[derive(Serialize, Deserialize)]
763#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
764pub enum EnergySourceCategory {
765 Coal,
766
767 Gas,
768
769 #[serde(rename = "GENERAL_FOSSIL")]
770 GeneralFossil,
771
772 #[serde(rename = "GENERAL_GREEN")]
773 GeneralGreen,
774
775 Nuclear,
776
777 Solar,
778
779 Water,
780
781 Wind,
782}
783
784#[derive(Serialize, Deserialize)]
785pub struct EnvironmentalImpact {
786 amount: f64,
787
788 category: EnvironmentalImpactCategory,
789}
790
791#[derive(Serialize, Deserialize)]
792#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
793pub enum EnvironmentalImpactCategory {
794 #[serde(rename = "CARBON_DIOXIDE")]
795 CarbonDioxide,
796
797 #[serde(rename = "NUCLEAR_WASTE")]
798 NuclearWaste,
799}
800
801#[derive(Serialize, Deserialize)]
802pub struct Price {
803 excl_vat: f64,
804
805 incl_vat: Option<f64>,
806}
807
808#[derive(Serialize, Deserialize)]
809#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
810pub enum TariffType {
811 #[serde(rename = "AD_HOC_PAYMENT")]
812 AdHocPayment,
813
814 #[serde(rename = "PROFILE_CHEAP")]
815 ProfileCheap,
816
817 #[serde(rename = "PROFILE_FAST")]
818 ProfileFast,
819
820 #[serde(rename = "PROFILE_GREEN")]
821 ProfileGreen,
822
823 Regular,
824}
825
826#[derive(Serialize, Deserialize)]
827pub struct ChargingPreferences {
828 departure_time: Option<String>,
829
830 discharge_allowed: Option<bool>,
831
832 energy_need: Option<f64>,
833
834 profile_type: ProfileType,
835}
836
837#[derive(Serialize, Deserialize)]
838pub struct ChargingProfileResponse {
839 result: ChargingProfileResponseType,
840
841 timeout: i64,
842}
843
844#[derive(Serialize, Deserialize)]
845#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
846pub enum ChargingProfileResponseType {
847 Accepted,
848
849 #[serde(rename = "NOT_SUPPORTED")]
850 NotSupported,
851
852 Rejected,
853
854 #[serde(rename = "TOO_OFTEN")]
855 TooOften,
856
857 #[serde(rename = "UNKNOWN_SESSION")]
858 UnknownSession,
859}
860
861#[derive(Serialize, Deserialize)]
862pub struct ChargingProfileResult {
863 result: ChargingProfileResultType,
864}
865
866#[derive(Serialize, Deserialize)]
867pub struct ClearProfileResult {
868 result: ChargingProfileResultType,
869}
870
871#[derive(Serialize, Deserialize)]
872pub struct CommandResponse {
873 message: Option<Vec<DisplayText>>,
874
875 result: CommandResponseType,
876
877 timeout: i64,
878}
879
880#[derive(Serialize, Deserialize)]
881#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
882pub enum CommandResponseType {
883 Accepted,
884
885 #[serde(rename = "NOT_SUPPORTED")]
886 NotSupported,
887
888 Rejected,
889
890 #[serde(rename = "UNKNOWN_SESSION")]
891 UnknownSession,
892}
893
894#[derive(Serialize, Deserialize)]
895pub struct CommandResult {
896 message: Option<Vec<DisplayText>>,
897
898 result: CommandResultType,
899}
900
901#[derive(Serialize, Deserialize)]
902#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
903pub enum CommandResultType {
904 Accepted,
905
906 #[serde(rename = "CANCELED_RESERVATION")]
907 CanceledReservation,
908
909 #[serde(rename = "EVSE_INOPERATIVE")]
910 EvseInoperative,
911
912 #[serde(rename = "EVSE_OCCUPIED")]
913 EvseOccupied,
914
915 Failed,
916
917 #[serde(rename = "NOT_SUPPORTED")]
918 NotSupported,
919
920 Rejected,
921
922 Timeout,
923
924 #[serde(rename = "UNKNOWN_RESERVATION")]
925 UnknownReservation,
926}
927
928#[derive(Serialize, Deserialize)]
929pub struct Connector {
930 format: ConnectorFormat,
931
932 id: String,
933
934 last_updated: String,
935
936 max_amperage: i64,
937
938 max_electric_power: Option<i64>,
939
940 max_voltage: i64,
941
942 power_type: PowerType,
943
944 standard: ConnectorType,
945
946 tariff_ids: Option<Vec<String>>,
947
948 terms_and_conditions: Option<String>,
949}
950
951#[derive(Serialize, Deserialize)]
952pub struct Credentials {
953 roles: Vec<CredentialsRole>,
954
955 token: String,
956
957 url: String,
958}
959
960#[derive(Serialize, Deserialize)]
961pub struct CredentialsRole {
962 business_details: BusinessDetails,
963
964 country_code: String,
965
966 party_id: String,
967
968 role: Role,
969}
970
971#[derive(Serialize, Deserialize)]
972pub struct BusinessDetails {
973 logo: Option<Image>,
974
975 name: String,
976
977 website: Option<String>,
978}
979
980#[derive(Serialize, Deserialize)]
981pub struct Image {
982 category: ImageCategory,
983
984 height: Option<i64>,
985
986 thumbnail: Option<String>,
987
988 #[serde(rename = "type")]
989 image_type: String,
990
991 url: String,
992
993 width: Option<i64>,
994}
995
996#[derive(Serialize, Deserialize)]
997pub enum ImageCategory {
998 #[serde(rename = "CHARGER")]
999 Charger,
1000
1001 #[serde(rename = "ENTRANCE")]
1002 Entrance,
1003
1004 #[serde(rename = "LOCATION")]
1005 Location,
1006
1007 #[serde(rename = "NETWORK")]
1008 Network,
1009
1010 #[serde(rename = "OPERATOR")]
1011 Operator,
1012
1013 #[serde(rename = "OTHER")]
1014 Other,
1015
1016 #[serde(rename = "OWNER")]
1017 Owner,
1018}
1019
1020#[derive(Serialize, Deserialize)]
1021pub enum Role {
1022 #[serde(rename = "CPO")]
1023 Cpo,
1024
1025 #[serde(rename = "EMSP")]
1026 Emsp,
1027
1028 #[serde(rename = "HUB")]
1029 Hub,
1030
1031 #[serde(rename = "NAP")]
1032 Nap,
1033
1034 #[serde(rename = "NSP")]
1035 Nsp,
1036
1037 #[serde(rename = "OTHER")]
1038 Other,
1039
1040 #[serde(rename = "SCSP")]
1041 Scsp,
1042}
1043
1044#[derive(Serialize, Deserialize)]
1045pub struct Endpoint {
1046 identifier: ModuleId,
1047
1048 role: InterfaceRole,
1049
1050 url: String,
1051}
1052
1053#[derive(Serialize, Deserialize)]
1054#[serde(rename_all = "snake_case")]
1055pub enum ModuleId {
1056 Cdrs,
1057
1058 Chargingprofiles,
1059
1060 Commands,
1061
1062 Credentials,
1063
1064 Hubclientinfo,
1065
1066 Locations,
1067
1068 Sessions,
1069
1070 Tariffs,
1071
1072 Tokens,
1073}
1074
1075#[derive(Serialize, Deserialize)]
1076pub enum InterfaceRole {
1077 #[serde(rename = "RECEIVER")]
1078 Receiver,
1079
1080 #[serde(rename = "SENDER")]
1081 Sender,
1082}
1083
1084#[derive(Serialize, Deserialize)]
1085pub struct Evse {
1086 capabilities: Option<Vec<Capability>>,
1087
1088 connectors: Vec<Connector>,
1089
1090 coordinates: Option<GeoLocation>,
1091
1092 directions: Option<Vec<DisplayText>>,
1093
1094 evse_id: Option<String>,
1095
1096 floor_level: Option<String>,
1097
1098 images: Option<Vec<Image>>,
1099
1100 last_updated: String,
1101
1102 parking_restrictions: Option<Vec<ParkingRestriction>>,
1103
1104 physical_reference: Option<String>,
1105
1106 status: Status,
1107
1108 status_schedule: Option<Vec<StatusSchedule>>,
1109
1110 uid: String,
1111}
1112
1113#[derive(Serialize, Deserialize)]
1114#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
1115pub enum Capability {
1116 #[serde(rename = "CHARGING_PREFERENCES_CAPABLE")]
1117 ChargingPreferencesCapable,
1118
1119 #[serde(rename = "CHARGING_PROFILE_CAPABLE")]
1120 ChargingProfileCapable,
1121
1122 #[serde(rename = "CHIP_CARD_SUPPORT")]
1123 ChipCardSupport,
1124
1125 #[serde(rename = "CONTACTLESS_CARD_SUPPORT")]
1126 ContactlessCardSupport,
1127
1128 #[serde(rename = "CREDIT_CARD_PAYABLE")]
1129 CreditCardPayable,
1130
1131 #[serde(rename = "DEBIT_CARD_PAYABLE")]
1132 DebitCardPayable,
1133
1134 #[serde(rename = "PED_TERMINAL")]
1135 PedTerminal,
1136
1137 #[serde(rename = "REMOTE_START_STOP_CAPABLE")]
1138 RemoteStartStopCapable,
1139
1140 Reservable,
1141
1142 #[serde(rename = "RFID_READER")]
1143 RfidReader,
1144
1145 #[serde(rename = "START_SESSION_CONNECTOR_REQUIRED")]
1146 StartSessionConnectorRequired,
1147
1148 #[serde(rename = "TOKEN_GROUP_CAPABLE")]
1149 TokenGroupCapable,
1150
1151 #[serde(rename = "UNLOCK_CAPABLE")]
1152 UnlockCapable,
1153}
1154
1155#[derive(Serialize, Deserialize)]
1156#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
1157pub enum ParkingRestriction {
1158 Customers,
1159
1160 Disabled,
1161
1162 #[serde(rename = "EV_ONLY")]
1163 EvOnly,
1164
1165 Motorcycles,
1166
1167 Plugged,
1168}
1169
1170#[derive(Serialize, Deserialize)]
1171pub enum Status {
1172 #[serde(rename = "AVAILABLE")]
1173 Available,
1174
1175 #[serde(rename = "BLOCKED")]
1176 Blocked,
1177
1178 #[serde(rename = "CHARGING")]
1179 Charging,
1180
1181 #[serde(rename = "INOPERATIVE")]
1182 Inoperative,
1183
1184 #[serde(rename = "OUTOFORDER")]
1185 Outoforder,
1186
1187 #[serde(rename = "PLANNED")]
1188 Planned,
1189
1190 #[serde(rename = "REMOVED")]
1191 Removed,
1192
1193 #[serde(rename = "RESERVED")]
1194 Reserved,
1195
1196 #[serde(rename = "UNKNOWN")]
1197 Unknown,
1198}
1199
1200#[derive(Serialize, Deserialize)]
1201pub struct StatusSchedule {
1202 period_begin: String,
1203
1204 period_end: Option<String>,
1205
1206 status: Status,
1207}
1208
1209#[derive(Serialize, Deserialize)]
1210pub struct HubClientInfo {
1211 country_code: String,
1212
1213 last_updated: String,
1214
1215 party_id: String,
1216
1217 role: Role,
1218
1219 status: ConnectionStatus,
1220}
1221
1222#[derive(Serialize, Deserialize)]
1223pub enum ConnectionStatus {
1224 #[serde(rename = "CONNECTED")]
1225 Connected,
1226
1227 #[serde(rename = "OFFLINE")]
1228 Offline,
1229
1230 #[serde(rename = "PLANNED")]
1231 Planned,
1232
1233 #[serde(rename = "SUSPENDED")]
1234 Suspended,
1235}
1236
1237#[derive(Serialize, Deserialize)]
1238pub struct Location {
1239 address: String,
1240
1241 charging_when_closed: Option<bool>,
1242
1243 city: String,
1244
1245 coordinates: GeoLocation,
1246
1247 country: String,
1248
1249 country_code: String,
1250
1251 directions: Option<Vec<DisplayText>>,
1252
1253 energy_mix: Option<EnergyMix>,
1254
1255 evses: Option<Vec<Evse>>,
1256
1257 facilities: Option<Vec<Facility>>,
1258
1259 id: String,
1260
1261 images: Option<Vec<Image>>,
1262
1263 last_updated: String,
1264
1265 name: Option<String>,
1266
1267 opening_times: Option<Hours>,
1268
1269 operator: Option<BusinessDetails>,
1270
1271 owner: Option<BusinessDetails>,
1272
1273 parking_type: Option<ParkingType>,
1274
1275 party_id: String,
1276
1277 postal_code: Option<String>,
1278
1279 publish: bool,
1280
1281 publish_allowed_to: Option<Vec<PublishTokenType>>,
1282
1283 related_locations: Option<Vec<AdditionalGeoLocation>>,
1284
1285 state: Option<String>,
1286
1287 suboperator: Option<BusinessDetails>,
1288
1289 time_zone: String,
1290}
1291
1292#[derive(Serialize, Deserialize)]
1293#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
1294pub enum Facility {
1295 Airport,
1296
1297 #[serde(rename = "BIKE_SHARING")]
1298 BikeSharing,
1299
1300 #[serde(rename = "BUS_STOP")]
1301 BusStop,
1302
1303 Cafe,
1304
1305 #[serde(rename = "CARPOOL_PARKING")]
1306 CarpoolParking,
1307
1308 #[serde(rename = "FUEL_STATION")]
1309 FuelStation,
1310
1311 Hotel,
1312
1313 Mall,
1314
1315 #[serde(rename = "METRO_STATION")]
1316 MetroStation,
1317
1318 Museum,
1319
1320 Nature,
1321
1322 #[serde(rename = "PARKING_LOT")]
1323 ParkingLot,
1324
1325 #[serde(rename = "RECREATION_AREA")]
1326 RecreationArea,
1327
1328 Restaurant,
1329
1330 Sport,
1331
1332 Supermarket,
1333
1334 #[serde(rename = "TAXI_STAND")]
1335 TaxiStand,
1336
1337 #[serde(rename = "TRAIN_STATION")]
1338 TrainStation,
1339
1340 #[serde(rename = "TRAM_STOP")]
1341 TramStop,
1342
1343 Wifi,
1344}
1345
1346#[derive(Serialize, Deserialize)]
1347pub struct Hours {
1348 exceptional_closings: Option<Vec<ExceptionalPeriod>>,
1349
1350 exceptional_openings: Option<Vec<ExceptionalPeriod>>,
1351
1352 regular_hours: Option<Vec<RegularHours>>,
1353
1354 twentyfourseven: bool,
1355}
1356
1357#[derive(Serialize, Deserialize)]
1358pub struct ExceptionalPeriod {
1359 period_begin: String,
1360
1361 period_end: String,
1362}
1363
1364#[derive(Serialize, Deserialize)]
1365pub struct RegularHours {
1366 period_begin: String,
1367
1368 period_end: String,
1369
1370 weekday: i64,
1371}
1372
1373#[derive(Serialize, Deserialize)]
1374#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
1375pub enum ParkingType {
1376 #[serde(rename = "ALONG_MOTORWAY")]
1377 AlongMotorway,
1378
1379 #[serde(rename = "ON_DRIVEWAY")]
1380 OnDriveway,
1381
1382 #[serde(rename = "ON_STREET")]
1383 OnStreet,
1384
1385 #[serde(rename = "PARKING_GARAGE")]
1386 ParkingGarage,
1387
1388 #[serde(rename = "PARKING_LOT")]
1389 ParkingLot,
1390
1391 #[serde(rename = "UNDERGROUND_GARAGE")]
1392 UndergroundGarage,
1393}
1394
1395#[derive(Serialize, Deserialize)]
1396pub struct PublishTokenType {
1397 group_id: Option<String>,
1398
1399 issuer: Option<String>,
1400
1401 #[serde(rename = "type")]
1402 publish_token_type_type: Option<TokenType>,
1403
1404 uid: Option<String>,
1405
1406 visual_number: Option<String>,
1407}
1408
1409#[derive(Serialize, Deserialize)]
1410pub struct AdditionalGeoLocation {
1411 latitude: String,
1412
1413 longitude: String,
1414
1415 name: Option<DisplayText>,
1416}
1417
1418#[derive(Serialize, Deserialize)]
1419pub struct ReserveNow {
1420 authorization_reference: Option<String>,
1421
1422 evse_uid: Option<String>,
1423
1424 expiry_date: String,
1425
1426 location_id: String,
1427
1428 reservation_id: String,
1429
1430 response_url: String,
1431
1432 token: Token,
1433}
1434
1435#[derive(Serialize, Deserialize)]
1436pub struct Session {
1437 auth_method: AuthMethod,
1438
1439 authorization_reference: Option<String>,
1440
1441 cdr_token: CdrToken,
1442
1443 charging_periods: Option<Vec<ChargingPeriod>>,
1444
1445 connector_id: String,
1446
1447 country_code: String,
1448
1449 currency: String,
1450
1451 end_date_time: Option<String>,
1452
1453 evse_uid: String,
1454
1455 id: String,
1456
1457 kwh: f64,
1458
1459 last_updated: String,
1460
1461 location_id: String,
1462
1463 meter_id: Option<String>,
1464
1465 party_id: String,
1466
1467 start_date_time: String,
1468
1469 status: SessionStatus,
1470
1471 total_cost: Option<Price>,
1472}
1473
1474#[derive(Serialize, Deserialize)]
1475pub enum SessionStatus {
1476 #[serde(rename = "ACTIVE")]
1477 Active,
1478
1479 #[serde(rename = "COMPLETED")]
1480 Completed,
1481
1482 #[serde(rename = "INVALID")]
1483 Invalid,
1484
1485 #[serde(rename = "PENDING")]
1486 Pending,
1487
1488 #[serde(rename = "RESERVATION")]
1489 Reservation,
1490}
1491
1492#[derive(Serialize, Deserialize)]
1493pub struct SetChargingProfile {
1494 charging_profile: ChargingProfile,
1495
1496 response_url: String,
1497}
1498
1499#[derive(Serialize, Deserialize)]
1500pub struct StartSession {
1501 authorization_reference: Option<String>,
1502
1503 connector_id: Option<String>,
1504
1505 evse_uid: Option<String>,
1506
1507 location_id: String,
1508
1509 response_url: String,
1510
1511 token: Token,
1512}
1513
1514#[derive(Serialize, Deserialize)]
1515pub struct StopSession {
1516 response_url: String,
1517
1518 session_id: String,
1519}
1520
1521#[derive(Serialize, Deserialize)]
1522pub struct UnlockConnector {
1523 connector_id: String,
1524
1525 evse_uid: String,
1526
1527 location_id: String,
1528
1529 response_url: String,
1530}
1531
1532#[derive(Serialize, Deserialize)]
1533pub struct Version {
1534 url: String,
1535
1536 version: VersionNumber,
1537}
1538
1539#[derive(Serialize, Deserialize)]
1540pub enum VersionNumber {
1541 #[serde(rename = "2.0")]
1542 The20,
1543
1544 #[serde(rename = "2.1")]
1545 The21,
1546
1547 #[serde(rename = "2.1.1")]
1548 The211,
1549
1550 #[serde(rename = "2.2")]
1551 The22,
1552
1553 #[serde(rename = "2.2.1")]
1554 The221,
1555}
1556
1557#[derive(Serialize, Deserialize)]
1558pub struct VersionDetails {
1559 endpoints: Vec<Endpoint>,
1560
1561 version: VersionNumber,
1562}