Skip to main content

ocpi_types/
v2.2.1.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.2.1;
8//
9// fn main() {
10//     let json = r#"{"answer": 42}"#;
11//     let model: v2.2.1 = serde_json::from_str(&json).unwrap();
12// }
13
14use 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}