Skip to main content

ocpi_types/
v2.3.0.rs

1// Example code that deserializes and serializes the model.
2// extern crate serde;
3// #[macro_use]
4// extern crate serde_derive;
5// extern crate serde_json;
6//
7// use generated_module::v2.3.0;
8//
9// fn main() {
10//     let json = r#"{"answer": 42}"#;
11//     let model: v2.3.0 = serde_json::from_str(&json).unwrap();
12// }
13
14use serde::{Serialize, Deserialize};
15
16#[derive(Serialize, Deserialize)]
17pub struct V230 {
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    Emaid,
237
238    Other,
239
240    Rfid,
241}
242
243#[derive(Serialize, Deserialize)]
244#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
245pub enum WhitelistType {
246    Allowed,
247
248    #[serde(rename = "ALLOWED_OFFLINE")]
249    AllowedOffline,
250
251    Always,
252
253    Never,
254}
255
256#[derive(Serialize, Deserialize)]
257pub struct CancelReservation {
258    reservation_id: String,
259
260    response_url: String,
261}
262
263#[derive(Serialize, Deserialize)]
264pub struct Cdr {
265    auth_method: AuthMethod,
266
267    authorization_reference: Option<String>,
268
269    cdr_location: CdrLocation,
270
271    cdr_token: CdrToken,
272
273    charging_periods: Vec<ChargingPeriod>,
274
275    country_code: String,
276
277    credit: Option<bool>,
278
279    credit_reference_id: Option<String>,
280
281    currency: String,
282
283    end_date_time: String,
284
285    home_charging_compensation: Option<bool>,
286
287    id: String,
288
289    invoice_reference_id: Option<String>,
290
291    last_updated: String,
292
293    meter_id: Option<String>,
294
295    party_id: String,
296
297    remark: Option<String>,
298
299    session_id: Option<String>,
300
301    signed_data: Option<SignedData>,
302
303    start_date_time: String,
304
305    tariffs: Option<Vec<Tariff>>,
306
307    total_cost: Price,
308
309    total_energy: f64,
310
311    total_energy_cost: Option<Price>,
312
313    total_fixed_cost: Option<Price>,
314
315    total_parking_cost: Option<Price>,
316
317    total_parking_time: Option<f64>,
318
319    total_reservation_cost: Option<Price>,
320
321    total_time: f64,
322
323    total_time_cost: Option<Price>,
324}
325
326#[derive(Serialize, Deserialize)]
327#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
328pub enum AuthMethod {
329    #[serde(rename = "AUTH_REQUEST")]
330    AuthRequest,
331
332    Command,
333
334    Whitelist,
335}
336
337#[derive(Serialize, Deserialize)]
338pub struct CdrLocation {
339    address: String,
340
341    city: String,
342
343    connector_format: ConnectorFormat,
344
345    connector_id: String,
346
347    connector_power_type: PowerType,
348
349    connector_standard: ConnectorType,
350
351    coordinates: GeoLocation,
352
353    country: String,
354
355    evse_id: String,
356
357    evse_uid: String,
358
359    id: String,
360
361    name: Option<String>,
362
363    postal_code: Option<String>,
364
365    state: Option<String>,
366}
367
368#[derive(Serialize, Deserialize)]
369pub enum ConnectorFormat {
370    #[serde(rename = "CABLE")]
371    Cable,
372
373    #[serde(rename = "SOCKET")]
374    Socket,
375}
376
377#[derive(Serialize, Deserialize)]
378#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
379pub enum PowerType {
380    #[serde(rename = "AC_1_PHASE")]
381    Ac1_Phase,
382
383    #[serde(rename = "AC_2_PHASE")]
384    Ac2_Phase,
385
386    #[serde(rename = "AC_2_PHASE_SPLIT")]
387    Ac2_PhaseSplit,
388
389    #[serde(rename = "AC_3_PHASE")]
390    Ac3_Phase,
391
392    Dc,
393}
394
395#[derive(Serialize, Deserialize)]
396#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
397pub enum ConnectorType {
398    Chademo,
399
400    Chaoji,
401
402    #[serde(rename = "DOMESTIC_A")]
403    DomesticA,
404
405    #[serde(rename = "DOMESTIC_B")]
406    DomesticB,
407
408    #[serde(rename = "DOMESTIC_C")]
409    DomesticC,
410
411    #[serde(rename = "DOMESTIC_D")]
412    DomesticD,
413
414    #[serde(rename = "DOMESTIC_E")]
415    DomesticE,
416
417    #[serde(rename = "DOMESTIC_F")]
418    DomesticF,
419
420    #[serde(rename = "DOMESTIC_G")]
421    DomesticG,
422
423    #[serde(rename = "DOMESTIC_H")]
424    DomesticH,
425
426    #[serde(rename = "DOMESTIC_I")]
427    DomesticI,
428
429    #[serde(rename = "DOMESTIC_J")]
430    DomesticJ,
431
432    #[serde(rename = "DOMESTIC_K")]
433    DomesticK,
434
435    #[serde(rename = "DOMESTIC_L")]
436    DomesticL,
437
438    #[serde(rename = "DOMESTIC_M")]
439    DomesticM,
440
441    #[serde(rename = "DOMESTIC_N")]
442    DomesticN,
443
444    #[serde(rename = "DOMESTIC_O")]
445    DomesticO,
446
447    #[serde(rename = "GBT_AC")]
448    GbtAc,
449
450    #[serde(rename = "GBT_DC")]
451    GbtDc,
452
453    #[serde(rename = "IEC_60309_2_single_16")]
454    Iec60309_2_Single16,
455
456    #[serde(rename = "IEC_60309_2_three_16")]
457    Iec60309_2_Three16,
458
459    #[serde(rename = "IEC_60309_2_three_32")]
460    Iec60309_2_Three32,
461
462    #[serde(rename = "IEC_60309_2_three_64")]
463    Iec60309_2_Three64,
464
465    #[serde(rename = "IEC_62196_T1")]
466    Iec62196_T1,
467
468    #[serde(rename = "IEC_62196_T1_COMBO")]
469    Iec62196_T1Combo,
470
471    #[serde(rename = "IEC_62196_T2")]
472    Iec62196_T2,
473
474    #[serde(rename = "IEC_62196_T2_COMBO")]
475    Iec62196_T2Combo,
476
477    #[serde(rename = "IEC_62196_T3A")]
478    Iec62196_T3A,
479
480    #[serde(rename = "IEC_62196_T3C")]
481    Iec62196_T3C,
482
483    Mcs,
484
485    #[serde(rename = "NEMA_10_30")]
486    Nema10_30,
487
488    #[serde(rename = "NEMA_10_50")]
489    Nema10_50,
490
491    #[serde(rename = "NEMA_14_30")]
492    Nema14_30,
493
494    #[serde(rename = "NEMA_14_50")]
495    Nema14_50,
496
497    #[serde(rename = "NEMA_5_20")]
498    Nema5_20,
499
500    #[serde(rename = "NEMA_6_30")]
501    Nema6_30,
502
503    #[serde(rename = "NEMA_6_50")]
504    Nema6_50,
505
506    #[serde(rename = "PANTOGRAPH_BOTTOM_UP")]
507    PantographBottomUp,
508
509    #[serde(rename = "PANTOGRAPH_TOP_DOWN")]
510    PantographTopDown,
511
512    #[serde(rename = "SAE_J3400")]
513    SaeJ3400,
514
515    #[serde(rename = "TESLA_R")]
516    TeslaR,
517
518    #[serde(rename = "TESLA_S")]
519    TeslaS,
520}
521
522#[derive(Serialize, Deserialize)]
523pub struct GeoLocation {
524    latitude: String,
525
526    longitude: String,
527}
528
529#[derive(Serialize, Deserialize)]
530pub struct CdrToken {
531    contract_id: String,
532
533    country_code: String,
534
535    party_id: String,
536
537    #[serde(rename = "type")]
538    cdr_token_type: TokenType,
539
540    uid: String,
541}
542
543#[derive(Serialize, Deserialize)]
544pub struct ChargingPeriod {
545    dimensions: Vec<CdrDimension>,
546
547    start_date_time: String,
548
549    tariff_id: Option<String>,
550}
551
552#[derive(Serialize, Deserialize)]
553pub struct CdrDimension {
554    #[serde(rename = "type")]
555    cdr_dimension_type: CdrDimensionType,
556
557    volume: f64,
558}
559
560#[derive(Serialize, Deserialize)]
561#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
562pub enum CdrDimensionType {
563    Current,
564
565    Energy,
566
567    #[serde(rename = "ENERGY_EXPORT")]
568    EnergyExport,
569
570    #[serde(rename = "ENERGY_IMPORT")]
571    EnergyImport,
572
573    #[serde(rename = "MAX_CURRENT")]
574    MaxCurrent,
575
576    #[serde(rename = "MAX_POWER")]
577    MaxPower,
578
579    #[serde(rename = "MIN_CURRENT")]
580    MinCurrent,
581
582    #[serde(rename = "MIN_POWER")]
583    MinPower,
584
585    #[serde(rename = "PARKING_TIME")]
586    ParkingTime,
587
588    Power,
589
590    #[serde(rename = "RESERVATION_TIME")]
591    ReservationTime,
592
593    #[serde(rename = "STATE_OF_CHARGE")]
594    StateOfCharge,
595
596    Time,
597}
598
599#[derive(Serialize, Deserialize)]
600pub struct SignedData {
601    encoding_method: String,
602
603    encoding_method_version: Option<i64>,
604
605    public_key: Option<String>,
606
607    signed_values: Vec<SignedValue>,
608
609    url: Option<String>,
610}
611
612#[derive(Serialize, Deserialize)]
613pub struct SignedValue {
614    nature: String,
615
616    plain_data: String,
617
618    signed_data: String,
619}
620
621#[derive(Serialize, Deserialize)]
622pub struct Tariff {
623    country_code: String,
624
625    currency: String,
626
627    elements: Vec<TariffElement>,
628
629    end_date_time: Option<String>,
630
631    energy_mix: Option<EnergyMix>,
632
633    id: String,
634
635    last_updated: String,
636
637    max_price: Option<PriceLimit>,
638
639    min_price: Option<PriceLimit>,
640
641    party_id: String,
642
643    start_date_time: Option<String>,
644
645    tariff_alt_text: Option<Vec<DisplayText>>,
646
647    tariff_alt_url: Option<String>,
648
649    tax_included: TaxIncluded,
650
651    #[serde(rename = "type")]
652    tariff_type: Option<TariffType>,
653}
654
655#[derive(Serialize, Deserialize)]
656pub struct TariffElement {
657    price_components: Vec<PriceComponent>,
658
659    restrictions: Option<TariffRestrictions>,
660}
661
662#[derive(Serialize, Deserialize)]
663pub struct PriceComponent {
664    price: f64,
665
666    step_size: i64,
667
668    #[serde(rename = "type")]
669    price_component_type: TariffDimensionType,
670
671    vat: Option<f64>,
672}
673
674#[derive(Serialize, Deserialize)]
675#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
676pub enum TariffDimensionType {
677    Energy,
678
679    Flat,
680
681    #[serde(rename = "PARKING_TIME")]
682    ParkingTime,
683
684    Time,
685}
686
687#[derive(Serialize, Deserialize)]
688pub struct TariffRestrictions {
689    day_of_week: Option<Vec<DayOfWeek>>,
690
691    end_date: Option<String>,
692
693    end_time: Option<String>,
694
695    max_current: Option<f64>,
696
697    max_duration: Option<i64>,
698
699    max_kwh: Option<f64>,
700
701    max_power: Option<f64>,
702
703    min_current: Option<f64>,
704
705    min_duration: Option<i64>,
706
707    min_kwh: Option<f64>,
708
709    min_power: Option<f64>,
710
711    reservation: Option<ReservationRestrictionType>,
712
713    start_date: Option<String>,
714
715    start_time: Option<String>,
716}
717
718#[derive(Serialize, Deserialize)]
719pub enum DayOfWeek {
720    #[serde(rename = "FRIDAY")]
721    Friday,
722
723    #[serde(rename = "MONDAY")]
724    Monday,
725
726    #[serde(rename = "SATURDAY")]
727    Saturday,
728
729    #[serde(rename = "SUNDAY")]
730    Sunday,
731
732    #[serde(rename = "THURSDAY")]
733    Thursday,
734
735    #[serde(rename = "TUESDAY")]
736    Tuesday,
737
738    #[serde(rename = "WEDNESDAY")]
739    Wednesday,
740}
741
742#[derive(Serialize, Deserialize)]
743#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
744pub enum ReservationRestrictionType {
745    Reservation,
746
747    #[serde(rename = "RESERVATION_EXPIRES")]
748    ReservationExpires,
749}
750
751#[derive(Serialize, Deserialize)]
752pub struct EnergyMix {
753    energy_product_name: Option<String>,
754
755    energy_sources: Option<Vec<EnergySource>>,
756
757    environ_impact: Option<Vec<EnvironmentalImpact>>,
758
759    is_green_energy: bool,
760
761    supplier_name: Option<String>,
762}
763
764#[derive(Serialize, Deserialize)]
765pub struct EnergySource {
766    percentage: f64,
767
768    source: EnergySourceCategory,
769}
770
771#[derive(Serialize, Deserialize)]
772#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
773pub enum EnergySourceCategory {
774    Coal,
775
776    Gas,
777
778    #[serde(rename = "GENERAL_FOSSIL")]
779    GeneralFossil,
780
781    #[serde(rename = "GENERAL_GREEN")]
782    GeneralGreen,
783
784    Nuclear,
785
786    Solar,
787
788    Water,
789
790    Wind,
791}
792
793#[derive(Serialize, Deserialize)]
794pub struct EnvironmentalImpact {
795    amount: f64,
796
797    category: EnvironmentalImpactCategory,
798}
799
800#[derive(Serialize, Deserialize)]
801#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
802pub enum EnvironmentalImpactCategory {
803    #[serde(rename = "CARBON_DIOXIDE")]
804    CarbonDioxide,
805
806    #[serde(rename = "NUCLEAR_WASTE")]
807    NuclearWaste,
808}
809
810#[derive(Serialize, Deserialize)]
811pub struct PriceLimit {
812    after_taxes: Option<f64>,
813
814    before_taxes: f64,
815}
816
817#[derive(Serialize, Deserialize)]
818#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
819pub enum TariffType {
820    #[serde(rename = "AD_HOC_PAYMENT")]
821    AdHocPayment,
822
823    #[serde(rename = "PROFILE_CHEAP")]
824    ProfileCheap,
825
826    #[serde(rename = "PROFILE_FAST")]
827    ProfileFast,
828
829    #[serde(rename = "PROFILE_GREEN")]
830    ProfileGreen,
831
832    Regular,
833}
834
835#[derive(Serialize, Deserialize)]
836pub enum TaxIncluded {
837    #[serde(rename = "N/A")]
838    NA,
839
840    #[serde(rename = "NO")]
841    No,
842
843    #[serde(rename = "YES")]
844    Yes,
845}
846
847#[derive(Serialize, Deserialize)]
848pub struct Price {
849    before_taxes: f64,
850
851    taxes: Option<Vec<TaxAmount>>,
852}
853
854#[derive(Serialize, Deserialize)]
855pub struct TaxAmount {
856    account_number: Option<String>,
857
858    amount: f64,
859
860    name: String,
861
862    percentage: Option<f64>,
863}
864
865#[derive(Serialize, Deserialize)]
866pub struct ChargingPreferences {
867    departure_time: Option<String>,
868
869    discharge_allowed: Option<bool>,
870
871    energy_need: Option<f64>,
872
873    profile_type: ProfileType,
874}
875
876#[derive(Serialize, Deserialize)]
877pub struct ChargingProfileResponse {
878    result: ChargingProfileResponseType,
879
880    timeout: i64,
881}
882
883#[derive(Serialize, Deserialize)]
884#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
885pub enum ChargingProfileResponseType {
886    Accepted,
887
888    #[serde(rename = "NOT_SUPPORTED")]
889    NotSupported,
890
891    Rejected,
892
893    #[serde(rename = "TOO_OFTEN")]
894    TooOften,
895
896    #[serde(rename = "UNKNOWN_SESSION")]
897    UnknownSession,
898}
899
900#[derive(Serialize, Deserialize)]
901pub struct ChargingProfileResult {
902    result: ChargingProfileResultType,
903}
904
905#[derive(Serialize, Deserialize)]
906pub struct ClearProfileResult {
907    result: ChargingProfileResultType,
908}
909
910#[derive(Serialize, Deserialize)]
911pub struct CommandResponse {
912    message: Option<Vec<DisplayText>>,
913
914    result: CommandResponseType,
915
916    timeout: i64,
917}
918
919#[derive(Serialize, Deserialize)]
920#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
921pub enum CommandResponseType {
922    Accepted,
923
924    #[serde(rename = "NOT_SUPPORTED")]
925    NotSupported,
926
927    Rejected,
928
929    #[serde(rename = "UNKNOWN_SESSION")]
930    UnknownSession,
931}
932
933#[derive(Serialize, Deserialize)]
934pub struct CommandResult {
935    message: Option<Vec<DisplayText>>,
936
937    result: CommandResultType,
938}
939
940#[derive(Serialize, Deserialize)]
941#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
942pub enum CommandResultType {
943    Accepted,
944
945    #[serde(rename = "CANCELED_RESERVATION")]
946    CanceledReservation,
947
948    #[serde(rename = "EVSE_INOPERATIVE")]
949    EvseInoperative,
950
951    #[serde(rename = "EVSE_OCCUPIED")]
952    EvseOccupied,
953
954    Failed,
955
956    #[serde(rename = "NOT_SUPPORTED")]
957    NotSupported,
958
959    Rejected,
960
961    Timeout,
962
963    #[serde(rename = "UNKNOWN_RESERVATION")]
964    UnknownReservation,
965}
966
967#[derive(Serialize, Deserialize)]
968pub struct Connector {
969    capabilities: Option<Vec<ConnectorCapability>>,
970
971    format: ConnectorFormat,
972
973    id: String,
974
975    last_updated: String,
976
977    max_amperage: i64,
978
979    max_electric_power: Option<i64>,
980
981    max_voltage: i64,
982
983    power_type: PowerType,
984
985    standard: ConnectorType,
986
987    tariff_ids: Option<Vec<String>>,
988
989    terms_and_conditions: Option<String>,
990}
991
992#[derive(Serialize, Deserialize)]
993#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
994pub enum ConnectorCapability {
995    #[serde(rename = "ISO_15118_20_PLUG_AND_CHARGE")]
996    Iso15118_20_PlugAndCharge,
997
998    #[serde(rename = "ISO_15118_2_PLUG_AND_CHARGE")]
999    Iso15118_2_PlugAndCharge,
1000}
1001
1002#[derive(Serialize, Deserialize)]
1003pub struct Credentials {
1004    hub_party_id: Option<String>,
1005
1006    roles: Vec<CredentialsRole>,
1007
1008    token: String,
1009
1010    url: String,
1011}
1012
1013#[derive(Serialize, Deserialize)]
1014pub struct CredentialsRole {
1015    business_details: BusinessDetails,
1016
1017    country_code: String,
1018
1019    party_id: String,
1020
1021    role: Role,
1022}
1023
1024#[derive(Serialize, Deserialize)]
1025pub struct BusinessDetails {
1026    logo: Option<Image>,
1027
1028    name: String,
1029
1030    website: Option<String>,
1031}
1032
1033#[derive(Serialize, Deserialize)]
1034pub struct Image {
1035    category: ImageCategory,
1036
1037    height: Option<i64>,
1038
1039    thumbnail: Option<String>,
1040
1041    #[serde(rename = "type")]
1042    image_type: String,
1043
1044    url: String,
1045
1046    width: Option<i64>,
1047}
1048
1049#[derive(Serialize, Deserialize)]
1050pub enum ImageCategory {
1051    #[serde(rename = "CHARGER")]
1052    Charger,
1053
1054    #[serde(rename = "ENTRANCE")]
1055    Entrance,
1056
1057    #[serde(rename = "LOCATION")]
1058    Location,
1059
1060    #[serde(rename = "NETWORK")]
1061    Network,
1062
1063    #[serde(rename = "OPERATOR")]
1064    Operator,
1065
1066    #[serde(rename = "OTHER")]
1067    Other,
1068
1069    #[serde(rename = "OWNER")]
1070    Owner,
1071}
1072
1073#[derive(Serialize, Deserialize)]
1074pub enum Role {
1075    #[serde(rename = "CPO")]
1076    Cpo,
1077
1078    #[serde(rename = "EMSP")]
1079    Emsp,
1080
1081    #[serde(rename = "NAP")]
1082    Nap,
1083
1084    #[serde(rename = "NSP")]
1085    Nsp,
1086
1087    #[serde(rename = "OTHER")]
1088    Other,
1089
1090    #[serde(rename = "SCSP")]
1091    Scsp,
1092}
1093
1094#[derive(Serialize, Deserialize)]
1095pub struct Endpoint {
1096    identifier: ModuleId,
1097
1098    role: InterfaceRole,
1099
1100    url: String,
1101}
1102
1103#[derive(Serialize, Deserialize)]
1104#[serde(rename_all = "snake_case")]
1105pub enum ModuleId {
1106    Cdrs,
1107
1108    Chargingprofiles,
1109
1110    Commands,
1111
1112    Credentials,
1113
1114    Hubclientinfo,
1115
1116    Locations,
1117
1118    Sessions,
1119
1120    Tariffs,
1121
1122    Tokens,
1123}
1124
1125#[derive(Serialize, Deserialize)]
1126pub enum InterfaceRole {
1127    #[serde(rename = "RECEIVER")]
1128    Receiver,
1129
1130    #[serde(rename = "SENDER")]
1131    Sender,
1132}
1133
1134#[derive(Serialize, Deserialize)]
1135pub struct Evse {
1136    accepted_service_providers: Option<Vec<String>>,
1137
1138    capabilities: Option<Vec<Capability>>,
1139
1140    connectors: Vec<Connector>,
1141
1142    coordinates: Option<GeoLocation>,
1143
1144    directions: Option<Vec<DisplayText>>,
1145
1146    evse_id: Option<String>,
1147
1148    floor_level: Option<String>,
1149
1150    images: Option<Vec<Image>>,
1151
1152    last_updated: String,
1153
1154    parking: Option<Vec<EvseParking>>,
1155
1156    parking_restrictions: Option<Vec<ParkingRestriction>>,
1157
1158    physical_reference: Option<String>,
1159
1160    status: Status,
1161
1162    status_schedule: Option<Vec<StatusSchedule>>,
1163
1164    uid: String,
1165}
1166
1167#[derive(Serialize, Deserialize)]
1168#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
1169pub enum Capability {
1170    #[serde(rename = "CHARGING_PREFERENCES_CAPABLE")]
1171    ChargingPreferencesCapable,
1172
1173    #[serde(rename = "CHARGING_PROFILE_CAPABLE")]
1174    ChargingProfileCapable,
1175
1176    #[serde(rename = "CHIP_CARD_SUPPORT")]
1177    ChipCardSupport,
1178
1179    #[serde(rename = "CONTACTLESS_CARD_SUPPORT")]
1180    ContactlessCardSupport,
1181
1182    #[serde(rename = "CREDIT_CARD_PAYABLE")]
1183    CreditCardPayable,
1184
1185    #[serde(rename = "DEBIT_CARD_PAYABLE")]
1186    DebitCardPayable,
1187
1188    #[serde(rename = "PED_TERMINAL")]
1189    PedTerminal,
1190
1191    #[serde(rename = "REMOTE_START_STOP_CAPABLE")]
1192    RemoteStartStopCapable,
1193
1194    Reservable,
1195
1196    #[serde(rename = "RFID_READER")]
1197    RfidReader,
1198
1199    #[serde(rename = "START_SESSION_CONNECTOR_REQUIRED")]
1200    StartSessionConnectorRequired,
1201
1202    #[serde(rename = "TOKEN_GROUP_CAPABLE")]
1203    TokenGroupCapable,
1204
1205    #[serde(rename = "UNLOCK_CAPABLE")]
1206    UnlockCapable,
1207}
1208
1209#[derive(Serialize, Deserialize)]
1210pub struct EvseParking {
1211    evse_position: Option<EvsePosition>,
1212
1213    parking_id: String,
1214}
1215
1216#[derive(Serialize, Deserialize)]
1217pub enum EvsePosition {
1218    #[serde(rename = "CENTER")]
1219    Center,
1220
1221    #[serde(rename = "LEFT")]
1222    Left,
1223
1224    #[serde(rename = "RIGHT")]
1225    Right,
1226}
1227
1228#[derive(Serialize, Deserialize)]
1229#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
1230pub enum ParkingRestriction {
1231    Customers,
1232
1233    Disabled,
1234
1235    Employees,
1236
1237    #[serde(rename = "EV_ONLY")]
1238    EvOnly,
1239
1240    Motorcycles,
1241
1242    Plugged,
1243
1244    Taxis,
1245
1246    Tenants,
1247}
1248
1249#[derive(Serialize, Deserialize)]
1250pub enum Status {
1251    #[serde(rename = "AVAILABLE")]
1252    Available,
1253
1254    #[serde(rename = "BLOCKED")]
1255    Blocked,
1256
1257    #[serde(rename = "CHARGING")]
1258    Charging,
1259
1260    #[serde(rename = "INOPERATIVE")]
1261    Inoperative,
1262
1263    #[serde(rename = "OUTOFORDER")]
1264    Outoforder,
1265
1266    #[serde(rename = "PLANNED")]
1267    Planned,
1268
1269    #[serde(rename = "REMOVED")]
1270    Removed,
1271
1272    #[serde(rename = "RESERVED")]
1273    Reserved,
1274
1275    #[serde(rename = "UNKNOWN")]
1276    Unknown,
1277}
1278
1279#[derive(Serialize, Deserialize)]
1280pub struct StatusSchedule {
1281    period_begin: String,
1282
1283    period_end: Option<String>,
1284
1285    status: Status,
1286}
1287
1288#[derive(Serialize, Deserialize)]
1289pub struct HubClientInfo {
1290    country_code: String,
1291
1292    last_updated: String,
1293
1294    party_id: String,
1295
1296    role: Role,
1297
1298    status: ConnectionStatus,
1299}
1300
1301#[derive(Serialize, Deserialize)]
1302pub enum ConnectionStatus {
1303    #[serde(rename = "CONNECTED")]
1304    Connected,
1305
1306    #[serde(rename = "OFFLINE")]
1307    Offline,
1308
1309    #[serde(rename = "PLANNED")]
1310    Planned,
1311
1312    #[serde(rename = "SUSPENDED")]
1313    Suspended,
1314}
1315
1316#[derive(Serialize, Deserialize)]
1317pub struct Location {
1318    address: String,
1319
1320    charging_when_closed: Option<bool>,
1321
1322    city: String,
1323
1324    coordinates: GeoLocation,
1325
1326    country: String,
1327
1328    country_code: String,
1329
1330    directions: Option<Vec<DisplayText>>,
1331
1332    energy_mix: Option<EnergyMix>,
1333
1334    evses: Option<Vec<Evse>>,
1335
1336    facilities: Option<Vec<Facility>>,
1337
1338    help_phone: Option<String>,
1339
1340    id: String,
1341
1342    images: Option<Vec<Image>>,
1343
1344    last_updated: String,
1345
1346    name: Option<String>,
1347
1348    opening_times: Option<Hours>,
1349
1350    operator: Option<BusinessDetails>,
1351
1352    owner: Option<BusinessDetails>,
1353
1354    parking_places: Option<Vec<Parking>>,
1355
1356    parking_type: Option<ParkingType>,
1357
1358    party_id: String,
1359
1360    postal_code: Option<String>,
1361
1362    publish: bool,
1363
1364    publish_allowed_to: Option<Vec<PublishTokenType>>,
1365
1366    related_locations: Option<Vec<AdditionalGeoLocation>>,
1367
1368    state: Option<String>,
1369
1370    suboperator: Option<BusinessDetails>,
1371
1372    time_zone: String,
1373}
1374
1375#[derive(Serialize, Deserialize)]
1376#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
1377pub enum Facility {
1378    Airport,
1379
1380    #[serde(rename = "BIKE_SHARING")]
1381    BikeSharing,
1382
1383    #[serde(rename = "BUS_STOP")]
1384    BusStop,
1385
1386    Cafe,
1387
1388    #[serde(rename = "CARPOOL_PARKING")]
1389    CarpoolParking,
1390
1391    #[serde(rename = "FUEL_STATION")]
1392    FuelStation,
1393
1394    Hotel,
1395
1396    Mall,
1397
1398    #[serde(rename = "METRO_STATION")]
1399    MetroStation,
1400
1401    Museum,
1402
1403    Nature,
1404
1405    #[serde(rename = "PARKING_LOT")]
1406    ParkingLot,
1407
1408    #[serde(rename = "RECREATION_AREA")]
1409    RecreationArea,
1410
1411    Restaurant,
1412
1413    Sport,
1414
1415    Supermarket,
1416
1417    #[serde(rename = "TAXI_STAND")]
1418    TaxiStand,
1419
1420    #[serde(rename = "TRAIN_STATION")]
1421    TrainStation,
1422
1423    #[serde(rename = "TRAM_STOP")]
1424    TramStop,
1425
1426    Wifi,
1427}
1428
1429#[derive(Serialize, Deserialize)]
1430pub struct Hours {
1431    exceptional_closings: Option<Vec<ExceptionalPeriod>>,
1432
1433    exceptional_openings: Option<Vec<ExceptionalPeriod>>,
1434
1435    regular_hours: Option<Vec<RegularHours>>,
1436
1437    twentyfourseven: bool,
1438}
1439
1440#[derive(Serialize, Deserialize)]
1441pub struct ExceptionalPeriod {
1442    period_begin: String,
1443
1444    period_end: String,
1445}
1446
1447#[derive(Serialize, Deserialize)]
1448pub struct RegularHours {
1449    period_begin: String,
1450
1451    period_end: String,
1452
1453    weekday: i64,
1454}
1455
1456#[derive(Serialize, Deserialize)]
1457pub struct Parking {
1458    apds_reference: Option<String>,
1459
1460    dangerous_goods_allowed: Option<bool>,
1461
1462    direction: Option<ParkingDirection>,
1463
1464    drive_through: Option<bool>,
1465
1466    id: String,
1467
1468    images: Option<Vec<Image>>,
1469
1470    lighting: Option<bool>,
1471
1472    max_vehicle_height: Option<f64>,
1473
1474    max_vehicle_length: Option<f64>,
1475
1476    max_vehicle_weight: Option<f64>,
1477
1478    max_vehicle_width: Option<f64>,
1479
1480    parking_space_length: Option<f64>,
1481
1482    parking_space_width: Option<f64>,
1483
1484    physical_reference: Option<String>,
1485
1486    refrigeration_outlet: Option<bool>,
1487
1488    reservation_required: bool,
1489
1490    restricted_to_type: bool,
1491
1492    roofed: Option<bool>,
1493
1494    standards: Option<Vec<String>>,
1495
1496    time_limit: Option<f64>,
1497
1498    vehicle_types: Vec<VehicleType>,
1499}
1500
1501#[derive(Serialize, Deserialize)]
1502pub enum ParkingDirection {
1503    #[serde(rename = "ANGLE")]
1504    Angle,
1505
1506    #[serde(rename = "PARALLEL")]
1507    Parallel,
1508
1509    #[serde(rename = "PERPENDICULAR")]
1510    Perpendicular,
1511}
1512
1513#[derive(Serialize, Deserialize)]
1514#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
1515pub enum VehicleType {
1516    Bus,
1517
1518    Disabled,
1519
1520    Motorcycle,
1521
1522    #[serde(rename = "PERSONAL_VEHICLE")]
1523    PersonalVehicle,
1524
1525    #[serde(rename = "PERSONAL_VEHICLE_WITH_TRAILER")]
1526    PersonalVehicleWithTrailer,
1527
1528    Rigid,
1529
1530    #[serde(rename = "SEMI_TRACTOR")]
1531    SemiTractor,
1532
1533    #[serde(rename = "TRUCK_WITH_TRAILER")]
1534    TruckWithTrailer,
1535
1536    Van,
1537}
1538
1539#[derive(Serialize, Deserialize)]
1540#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
1541pub enum ParkingType {
1542    #[serde(rename = "ALONG_MOTORWAY")]
1543    AlongMotorway,
1544
1545    #[serde(rename = "ON_DRIVEWAY")]
1546    OnDriveway,
1547
1548    #[serde(rename = "ON_STREET")]
1549    OnStreet,
1550
1551    #[serde(rename = "PARKING_GARAGE")]
1552    ParkingGarage,
1553
1554    #[serde(rename = "PARKING_LOT")]
1555    ParkingLot,
1556
1557    #[serde(rename = "UNDERGROUND_GARAGE")]
1558    UndergroundGarage,
1559}
1560
1561#[derive(Serialize, Deserialize)]
1562pub struct PublishTokenType {
1563    group_id: Option<String>,
1564
1565    issuer: Option<String>,
1566
1567    #[serde(rename = "type")]
1568    publish_token_type_type: Option<TokenType>,
1569
1570    uid: Option<String>,
1571
1572    visual_number: Option<String>,
1573}
1574
1575#[derive(Serialize, Deserialize)]
1576pub struct AdditionalGeoLocation {
1577    latitude: String,
1578
1579    longitude: String,
1580
1581    name: Option<DisplayText>,
1582}
1583
1584#[derive(Serialize, Deserialize)]
1585pub struct ReserveNow {
1586    authorization_reference: Option<String>,
1587
1588    evse_uid: Option<String>,
1589
1590    expiry_date: String,
1591
1592    location_id: String,
1593
1594    reservation_id: String,
1595
1596    response_url: String,
1597
1598    token: Token,
1599}
1600
1601#[derive(Serialize, Deserialize)]
1602pub struct Session {
1603    auth_method: AuthMethod,
1604
1605    authorization_reference: Option<String>,
1606
1607    cdr_token: CdrToken,
1608
1609    charging_periods: Option<Vec<ChargingPeriod>>,
1610
1611    connector_id: String,
1612
1613    country_code: String,
1614
1615    currency: String,
1616
1617    end_date_time: Option<String>,
1618
1619    evse_uid: String,
1620
1621    id: String,
1622
1623    kwh: f64,
1624
1625    last_updated: String,
1626
1627    location_id: String,
1628
1629    meter_id: Option<String>,
1630
1631    party_id: String,
1632
1633    start_date_time: String,
1634
1635    status: SessionStatus,
1636
1637    total_cost: Option<Price>,
1638}
1639
1640#[derive(Serialize, Deserialize)]
1641pub enum SessionStatus {
1642    #[serde(rename = "ACTIVE")]
1643    Active,
1644
1645    #[serde(rename = "COMPLETED")]
1646    Completed,
1647
1648    #[serde(rename = "INVALID")]
1649    Invalid,
1650
1651    #[serde(rename = "PENDING")]
1652    Pending,
1653
1654    #[serde(rename = "RESERVATION")]
1655    Reservation,
1656}
1657
1658#[derive(Serialize, Deserialize)]
1659pub struct SetChargingProfile {
1660    charging_profile: ChargingProfile,
1661
1662    response_url: String,
1663}
1664
1665#[derive(Serialize, Deserialize)]
1666pub struct StartSession {
1667    authorization_reference: Option<String>,
1668
1669    connector_id: Option<String>,
1670
1671    evse_uid: Option<String>,
1672
1673    location_id: String,
1674
1675    response_url: String,
1676
1677    token: Token,
1678}
1679
1680#[derive(Serialize, Deserialize)]
1681pub struct StopSession {
1682    response_url: String,
1683
1684    session_id: String,
1685}
1686
1687#[derive(Serialize, Deserialize)]
1688pub struct UnlockConnector {
1689    connector_id: String,
1690
1691    evse_uid: String,
1692
1693    location_id: String,
1694
1695    response_url: String,
1696}
1697
1698#[derive(Serialize, Deserialize)]
1699pub struct Version {
1700    url: String,
1701
1702    version: VersionNumber,
1703}
1704
1705#[derive(Serialize, Deserialize)]
1706pub enum VersionNumber {
1707    #[serde(rename = "2.0")]
1708    The20,
1709
1710    #[serde(rename = "2.1")]
1711    The21,
1712
1713    #[serde(rename = "2.1.1")]
1714    The211,
1715
1716    #[serde(rename = "2.2")]
1717    The22,
1718
1719    #[serde(rename = "2.2.1")]
1720    The221,
1721
1722    #[serde(rename = "2.3.0")]
1723    The230,
1724}
1725
1726#[derive(Serialize, Deserialize)]
1727pub struct VersionDetails {
1728    endpoints: Vec<Endpoint>,
1729
1730    version: VersionNumber,
1731}