1#[allow(
2 non_camel_case_types,
3 non_snake_case,
4 non_upper_case_globals,
5 unused,
6 clippy::too_many_arguments
7)]
8pub mod efc_data_dictionary {
9 extern crate alloc;
10 use core::borrow::Borrow;
11
12 use rasn::prelude::*;
13 #[doc = " Clause 5.3\tSingle level data types"]
14 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
15 #[rasn(automatic_tags)]
16 pub struct AxleWeightLimits {
17 #[rasn(identifier = "maxLadenWeightOnAxle1")]
18 pub max_laden_weight_on_axle1: Int2Unsigned,
19 #[rasn(identifier = "maxLadenWeightOnAxle2")]
20 pub max_laden_weight_on_axle2: Int2Unsigned,
21 #[rasn(identifier = "maxLadenWeightOnAxle3")]
22 pub max_laden_weight_on_axle3: Int2Unsigned,
23 #[rasn(identifier = "maxLadenWeightOnAxle4")]
24 pub max_laden_weight_on_axle4: Int2Unsigned,
25 #[rasn(identifier = "maxLadenWeightOnAxle5")]
26 pub max_laden_weight_on_axle5: Int2Unsigned,
27 }
28 impl AxleWeightLimits {
29 pub fn new(
30 max_laden_weight_on_axle1: Int2Unsigned,
31 max_laden_weight_on_axle2: Int2Unsigned,
32 max_laden_weight_on_axle3: Int2Unsigned,
33 max_laden_weight_on_axle4: Int2Unsigned,
34 max_laden_weight_on_axle5: Int2Unsigned,
35 ) -> Self {
36 Self {
37 max_laden_weight_on_axle1,
38 max_laden_weight_on_axle2,
39 max_laden_weight_on_axle3,
40 max_laden_weight_on_axle4,
41 max_laden_weight_on_axle5,
42 }
43 }
44 }
45 #[doc = " Int2Signed ::=\tINTEGER (-32768..32767)"]
46 #[doc = " Int3Unsigned ::= INTEGER (0..16777215)"]
47 #[doc = " Int4Unsigned ::= INTEGER (0..4294967295)"]
48 #[doc = " Int4Signed ::= INTEGER (-2147483648..2147483647)"]
49 #[doc = " 5.2\tSubtypes of simple data types"]
50 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
51 #[rasn(delegate, value("0..=15"))]
52 pub struct CopValue(pub u8);
53 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
54 #[rasn(automatic_tags)]
55 pub struct DieselEmissionValues {
56 pub particulate: Particulate,
57 #[rasn(identifier = "absorptionCoeff")]
58 pub absorption_coeff: Int2Unsigned,
59 }
60 impl DieselEmissionValues {
61 pub fn new(particulate: Particulate, absorption_coeff: Int2Unsigned) -> Self {
62 Self {
63 particulate,
64 absorption_coeff,
65 }
66 }
67 }
68 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
69 #[rasn(delegate, value("0..=1"))]
70 pub struct EmissionUnit(pub u8);
71 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
72 #[rasn(delegate, value("0..=255"))]
73 pub struct EngineCharacteristics(pub u8);
74 #[doc = " Clause 5.4\tTwo level data types"]
75 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
76 #[rasn(automatic_tags)]
77 pub struct EnvironmentalCharacteristics {
78 #[rasn(identifier = "euroValue")]
79 pub euro_value: EuroValue,
80 #[rasn(identifier = "copValue")]
81 pub cop_value: CopValue,
82 }
83 impl EnvironmentalCharacteristics {
84 pub fn new(euro_value: EuroValue, cop_value: CopValue) -> Self {
85 Self {
86 euro_value,
87 cop_value,
88 }
89 }
90 }
91 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
92 #[rasn(delegate, value("0..=15"))]
93 pub struct EuroValue(pub u8);
94 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
95 #[rasn(automatic_tags)]
96 pub struct ExhaustEmissionValues {
97 #[rasn(identifier = "unitType")]
98 pub unit_type: EmissionUnit,
99 #[rasn(value("0..=32767"), identifier = "emissionCo")]
100 pub emission_co: u16,
101 #[rasn(identifier = "emissionHc")]
102 pub emission_hc: Int2Unsigned,
103 #[rasn(identifier = "emissionNox")]
104 pub emission_nox: Int2Unsigned,
105 #[rasn(identifier = "emissionHcNox")]
106 pub emission_hc_nox: Int2Unsigned,
107 }
108 impl ExhaustEmissionValues {
109 pub fn new(
110 unit_type: EmissionUnit,
111 emission_co: u16,
112 emission_hc: Int2Unsigned,
113 emission_nox: Int2Unsigned,
114 emission_hc_nox: Int2Unsigned,
115 ) -> Self {
116 Self {
117 unit_type,
118 emission_co,
119 emission_hc,
120 emission_nox,
121 emission_hc_nox,
122 }
123 }
124 }
125 #[doc = " useful subtypes (with no semantics associated)"]
126 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
127 #[rasn(delegate, value("0..=255"))]
128 pub struct Int1Unsigned(pub u8);
129 #[doc = " Int1Signed ::= INTEGER (-128..127)"]
130 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
131 #[rasn(delegate, value("0..=65535"))]
132 pub struct Int2Unsigned(pub u16);
133 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
134 #[rasn(automatic_tags)]
135 pub struct Particulate {
136 #[rasn(identifier = "unitType")]
137 pub unit_type: EmissionUnit,
138 #[rasn(value("0..=32767"))]
139 pub value: u16,
140 }
141 impl Particulate {
142 pub fn new(unit_type: EmissionUnit, value: u16) -> Self {
143 Self { unit_type, value }
144 }
145 }
146 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
147 #[rasn(automatic_tags)]
148 pub struct PassengerCapacity {
149 #[rasn(identifier = "numberOfSeats")]
150 pub number_of_seats: Int1Unsigned,
151 #[rasn(identifier = "numberOfStandingPlaces")]
152 pub number_of_standing_places: Int1Unsigned,
153 }
154 impl PassengerCapacity {
155 pub fn new(number_of_seats: Int1Unsigned, number_of_standing_places: Int1Unsigned) -> Self {
156 Self {
157 number_of_seats,
158 number_of_standing_places,
159 }
160 }
161 }
162 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
163 #[rasn(automatic_tags)]
164 pub struct SoundLevel {
165 #[rasn(identifier = "soundStationary")]
166 pub sound_stationary: Int1Unsigned,
167 #[rasn(identifier = "soundDriveBy")]
168 pub sound_drive_by: Int1Unsigned,
169 }
170 impl SoundLevel {
171 pub fn new(sound_stationary: Int1Unsigned, sound_drive_by: Int1Unsigned) -> Self {
172 Self {
173 sound_stationary,
174 sound_drive_by,
175 }
176 }
177 }
178 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
179 #[rasn(automatic_tags)]
180 pub struct VehicleDimensions {
181 #[rasn(identifier = "vehicleLengthOverall")]
182 pub vehicle_length_overall: Int1Unsigned,
183 #[rasn(identifier = "vehicleHeightOverall")]
184 pub vehicle_height_overall: Int1Unsigned,
185 #[rasn(identifier = "vehicleWidthOverall")]
186 pub vehicle_width_overall: Int1Unsigned,
187 }
188 impl VehicleDimensions {
189 pub fn new(
190 vehicle_length_overall: Int1Unsigned,
191 vehicle_height_overall: Int1Unsigned,
192 vehicle_width_overall: Int1Unsigned,
193 ) -> Self {
194 Self {
195 vehicle_length_overall,
196 vehicle_height_overall,
197 vehicle_width_overall,
198 }
199 }
200 }
201 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
202 #[rasn(automatic_tags)]
203 pub struct VehicleWeightLimits {
204 #[rasn(identifier = "vehicleMaxLadenWeight")]
205 pub vehicle_max_laden_weight: Int2Unsigned,
206 #[rasn(identifier = "vehicleTrainMaximumWeight")]
207 pub vehicle_train_maximum_weight: Int2Unsigned,
208 #[rasn(identifier = "vehicleWeightUnladen")]
209 pub vehicle_weight_unladen: Int2Unsigned,
210 }
211 impl VehicleWeightLimits {
212 pub fn new(
213 vehicle_max_laden_weight: Int2Unsigned,
214 vehicle_train_maximum_weight: Int2Unsigned,
215 vehicle_weight_unladen: Int2Unsigned,
216 ) -> Self {
217 Self {
218 vehicle_max_laden_weight,
219 vehicle_train_maximum_weight,
220 vehicle_weight_unladen,
221 }
222 }
223 }
224}
225#[allow(
226 non_camel_case_types,
227 non_snake_case,
228 non_upper_case_globals,
229 unused,
230 clippy::too_many_arguments
231)]
232pub mod gdd {
233 extern crate alloc;
234 use core::borrow::Borrow;
235
236 use rasn::prelude::*;
237 #[doc = " Definition of data elements used in ISO 14823 attributes"]
238 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
239 #[rasn(delegate, identifier = "Code-Units", value("0..=15"))]
240 pub struct CodeUnits(pub u8);
241 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
242 #[rasn(automatic_tags, identifier = "DDD-IO")]
243 pub struct DDDIO {
244 #[rasn(value("0..=7"), identifier = "arrowDirection")]
245 pub arrow_direction: u8,
246 #[rasn(identifier = "destPlace")]
247 pub dest_place: Option<DestinationPlaces>,
248 #[rasn(identifier = "destRoad")]
249 pub dest_road: Option<DestinationRoads>,
250 #[rasn(value("1..=999"), identifier = "roadNumberIdentifier")]
251 pub road_number_identifier: Option<u16>,
252 #[rasn(value("1..=999"), identifier = "streetName")]
253 pub street_name: Option<u16>,
254 #[rasn(identifier = "streetNameText")]
255 pub street_name_text: Option<Utf8String>,
256 #[rasn(identifier = "distanceToDivergingPoint")]
257 pub distance_to_diverging_point: Option<DistanceOrDuration>,
258 #[rasn(identifier = "distanceToDestinationPlace")]
259 pub distance_to_destination_place: Option<DistanceOrDuration>,
260 }
261 impl DDDIO {
262 pub fn new(
263 arrow_direction: u8,
264 dest_place: Option<DestinationPlaces>,
265 dest_road: Option<DestinationRoads>,
266 road_number_identifier: Option<u16>,
267 street_name: Option<u16>,
268 street_name_text: Option<Utf8String>,
269 distance_to_diverging_point: Option<DistanceOrDuration>,
270 distance_to_destination_place: Option<DistanceOrDuration>,
271 ) -> Self {
272 Self {
273 arrow_direction,
274 dest_place,
275 dest_road,
276 road_number_identifier,
277 street_name,
278 street_name_text,
279 distance_to_diverging_point,
280 distance_to_destination_place,
281 }
282 }
283 }
284 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
285 #[rasn(delegate, size("1..=8", extensible), identifier = "DDD-IO-LIST")]
286 pub struct DDDIOLIST(pub SequenceOf<DDDIO>);
287 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
288 #[rasn(delegate)]
289 pub struct DayOfWeek(pub FixedBitString<8usize>);
290 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
291 #[rasn(automatic_tags)]
292 pub struct DestinationPlace {
293 #[rasn(identifier = "destType")]
294 pub dest_type: DestinationType,
295 #[rasn(value("0.."), identifier = "destRSCode")]
296 pub dest_rscode: Option<GddStructure>,
297 #[rasn(identifier = "destBlob")]
298 pub dest_blob: Option<OctetString>,
299 #[rasn(value("1..=999"), identifier = "placeNameIdentification")]
300 pub place_name_identification: Option<u16>,
301 #[rasn(identifier = "placeNameText")]
302 pub place_name_text: Option<Utf8String>,
303 }
304 impl DestinationPlace {
305 pub fn new(
306 dest_type: DestinationType,
307 dest_rscode: Option<GddStructure>,
308 dest_blob: Option<OctetString>,
309 place_name_identification: Option<u16>,
310 place_name_text: Option<Utf8String>,
311 ) -> Self {
312 Self {
313 dest_type,
314 dest_rscode,
315 dest_blob,
316 place_name_identification,
317 place_name_text,
318 }
319 }
320 }
321 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
322 #[rasn(delegate, size("1..=4", extensible))]
323 pub struct DestinationPlaces(pub SequenceOf<DestinationPlace>);
324 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
325 #[rasn(automatic_tags)]
326 pub struct DestinationRoad {
327 #[rasn(identifier = "derType")]
328 pub der_type: DestinationRoadType,
329 #[rasn(value("1..=999"), identifier = "roadNumberIdentifier")]
330 pub road_number_identifier: Option<u16>,
331 #[rasn(identifier = "roadNumberText")]
332 pub road_number_text: Option<Utf8String>,
333 }
334 impl DestinationRoad {
335 pub fn new(
336 der_type: DestinationRoadType,
337 road_number_identifier: Option<u16>,
338 road_number_text: Option<Utf8String>,
339 ) -> Self {
340 Self {
341 der_type,
342 road_number_identifier,
343 road_number_text,
344 }
345 }
346 }
347 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
348 #[rasn(delegate, value("0..=15", extensible))]
349 pub struct DestinationRoadType(pub Integer);
350 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
351 #[rasn(delegate, size("1..=4", extensible))]
352 pub struct DestinationRoads(pub SequenceOf<DestinationRoad>);
353 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
354 #[rasn(delegate, value("0..=15", extensible))]
355 pub struct DestinationType(pub Integer);
356 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
357 #[rasn(automatic_tags)]
358 pub struct Distance {
359 #[rasn(value("1..=16384"))]
360 pub value: u16,
361 #[rasn(value("2..=8"))]
362 pub unit: CodeUnits,
363 }
364 impl Distance {
365 pub fn new(value: u16, unit: CodeUnits) -> Self {
366 Self { value, unit }
367 }
368 }
369 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
370 #[rasn(automatic_tags)]
371 pub struct DistanceOrDuration {
372 #[rasn(value("1..=16384"))]
373 pub value: u16,
374 #[rasn(value("2..=9"))]
375 pub unit: CodeUnits,
376 }
377 impl DistanceOrDuration {
378 pub fn new(value: u16, unit: CodeUnits) -> Self {
379 Self { value, unit }
380 }
381 }
382 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
383 #[rasn(choice, automatic_tags)]
384 pub enum GddAttribute {
385 dtm(InternationalSignApplicablePeriod),
386 edt(InternationalSignExemptedApplicablePeriod),
387 dfl(InternationalSignDirectionalFlowOfLane),
388 ved(InternationalSignApplicableVehicleDimensions),
389 spe(InternationalSignSpeedLimits),
390 roi(InternationalSignRateOfIncline),
391 dbv(InternationalSignDistanceBetweenVehicles),
392 ddd(InternationalSignDestinationInformation),
393 set(InternationalSignSection),
394 nol(InternationalSignNumberOfLane),
395 }
396 #[doc = " Definition of the single ISO 14823 Attributes"]
397 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
398 #[rasn(delegate, size("1..=8", extensible))]
399 pub struct GddAttributes(pub SequenceOf<GddAttribute>);
400 #[doc = " Inner type "]
401 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash, Copy)]
402 #[rasn(enumerated)]
403 #[non_exhaustive]
404 pub enum GddStructurePictogramCodeServiceCategoryCodeTrafficSignPictogram {
405 dangerWarning = 0,
406 regulatory = 1,
407 informative = 2,
408 }
409 #[doc = " Inner type "]
410 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash, Copy)]
411 #[rasn(enumerated)]
412 #[non_exhaustive]
413 pub enum GddStructurePictogramCodeServiceCategoryCodePublicFacilitiesPictogram {
414 publicFacilities = 0,
415 }
416 #[doc = " Inner type "]
417 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash, Copy)]
418 #[rasn(enumerated)]
419 #[non_exhaustive]
420 pub enum GddStructurePictogramCodeServiceCategoryCodeAmbientOrRoadConditionPictogram {
421 ambientCondition = 0,
422 roadCondition = 1,
423 }
424 #[doc = " Inner type "]
425 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
426 #[rasn(choice, automatic_tags)]
427 #[non_exhaustive]
428 pub enum GddStructurePictogramCodeServiceCategoryCode {
429 trafficSignPictogram(GddStructurePictogramCodeServiceCategoryCodeTrafficSignPictogram),
430 publicFacilitiesPictogram(
431 GddStructurePictogramCodeServiceCategoryCodePublicFacilitiesPictogram,
432 ),
433 ambientOrRoadConditionPictogram(
434 GddStructurePictogramCodeServiceCategoryCodeAmbientOrRoadConditionPictogram,
435 ),
436 }
437 #[doc = " Inner type "]
438 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
439 #[rasn(automatic_tags)]
440 pub struct GddStructurePictogramCodePictogramCategoryCode {
441 #[rasn(value("1..=9"))]
442 pub nature: u8,
443 #[rasn(value("0..=99"), identifier = "serialNumber")]
444 pub serial_number: u8,
445 }
446 impl GddStructurePictogramCodePictogramCategoryCode {
447 pub fn new(nature: u8, serial_number: u8) -> Self {
448 Self {
449 nature,
450 serial_number,
451 }
452 }
453 }
454 #[doc = " Inner type "]
455 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
456 #[rasn(automatic_tags)]
457 pub struct GddStructurePictogramCode {
458 #[rasn(size("2"), identifier = "countryCode")]
459 pub country_code: Option<OctetString>,
460 #[rasn(identifier = "serviceCategoryCode")]
461 pub service_category_code: GddStructurePictogramCodeServiceCategoryCode,
462 #[rasn(identifier = "pictogramCategoryCode")]
463 pub pictogram_category_code: GddStructurePictogramCodePictogramCategoryCode,
464 }
465 impl GddStructurePictogramCode {
466 pub fn new(
467 country_code: Option<OctetString>,
468 service_category_code: GddStructurePictogramCodeServiceCategoryCode,
469 pictogram_category_code: GddStructurePictogramCodePictogramCategoryCode,
470 ) -> Self {
471 Self {
472 country_code,
473 service_category_code,
474 pictogram_category_code,
475 }
476 }
477 }
478 #[doc = "Definition of GDD Structure"]
479 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
480 #[rasn(automatic_tags)]
481 pub struct GddStructure {
482 #[rasn(identifier = "pictogramCode")]
483 pub pictogram_code: GddStructurePictogramCode,
484 pub attributes: Option<GddAttributes>,
485 }
486 impl GddStructure {
487 pub fn new(
488 pictogram_code: GddStructurePictogramCode,
489 attributes: Option<GddAttributes>,
490 ) -> Self {
491 Self {
492 pictogram_code,
493 attributes,
494 }
495 }
496 }
497 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
498 #[rasn(automatic_tags)]
499 pub struct HoursMinutes {
500 #[rasn(value("0..=23"))]
501 pub hours: u8,
502 #[rasn(value("0..=59"))]
503 pub mins: u8,
504 }
505 impl HoursMinutes {
506 pub fn new(hours: u8, mins: u8) -> Self {
507 Self { hours, mins }
508 }
509 }
510 #[doc = " Inner type "]
511 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
512 #[rasn(automatic_tags)]
513 pub struct InternationalSignApplicablePeriodYear {
514 #[rasn(value("2000..=2127", extensible), identifier = "yearRangeStartYear")]
515 pub year_range_start_year: Integer,
516 #[rasn(value("2000..=2127", extensible), identifier = "yearRangeEndYear")]
517 pub year_range_end_year: Integer,
518 }
519 impl InternationalSignApplicablePeriodYear {
520 pub fn new(year_range_start_year: Integer, year_range_end_year: Integer) -> Self {
521 Self {
522 year_range_start_year,
523 year_range_end_year,
524 }
525 }
526 }
527 #[doc = " Inner type "]
528 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
529 #[rasn(automatic_tags)]
530 pub struct InternationalSignApplicablePeriodMonthDay {
531 #[rasn(identifier = "dateRangeStartMonthDay")]
532 pub date_range_start_month_day: MonthDay,
533 #[rasn(identifier = "dateRangeEndMonthDay")]
534 pub date_range_end_month_day: MonthDay,
535 }
536 impl InternationalSignApplicablePeriodMonthDay {
537 pub fn new(
538 date_range_start_month_day: MonthDay,
539 date_range_end_month_day: MonthDay,
540 ) -> Self {
541 Self {
542 date_range_start_month_day,
543 date_range_end_month_day,
544 }
545 }
546 }
547 #[doc = " Inner type "]
548 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
549 #[rasn(automatic_tags)]
550 pub struct InternationalSignApplicablePeriodHourMinutes {
551 #[rasn(identifier = "timeRangeStartTime")]
552 pub time_range_start_time: HoursMinutes,
553 #[rasn(identifier = "timeRangeEndTime")]
554 pub time_range_end_time: HoursMinutes,
555 }
556 impl InternationalSignApplicablePeriodHourMinutes {
557 pub fn new(time_range_start_time: HoursMinutes, time_range_end_time: HoursMinutes) -> Self {
558 Self {
559 time_range_start_time,
560 time_range_end_time,
561 }
562 }
563 }
564 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
565 #[rasn(automatic_tags, identifier = "InternationalSign-applicablePeriod")]
566 pub struct InternationalSignApplicablePeriod {
567 pub year: Option<InternationalSignApplicablePeriodYear>,
568 #[rasn(identifier = "month-day")]
569 pub month_day: Option<InternationalSignApplicablePeriodMonthDay>,
570 #[rasn(identifier = "repeatingPeriodDayTypes")]
571 pub repeating_period_day_types: Option<RepeatingPeriodDayTypes>,
572 #[rasn(identifier = "hourMinutes")]
573 pub hour_minutes: Option<InternationalSignApplicablePeriodHourMinutes>,
574 #[rasn(identifier = "dateRangeOfWeek")]
575 pub date_range_of_week: Option<DayOfWeek>,
576 #[rasn(identifier = "durationHourMinute")]
577 pub duration_hour_minute: Option<HoursMinutes>,
578 }
579 impl InternationalSignApplicablePeriod {
580 pub fn new(
581 year: Option<InternationalSignApplicablePeriodYear>,
582 month_day: Option<InternationalSignApplicablePeriodMonthDay>,
583 repeating_period_day_types: Option<RepeatingPeriodDayTypes>,
584 hour_minutes: Option<InternationalSignApplicablePeriodHourMinutes>,
585 date_range_of_week: Option<DayOfWeek>,
586 duration_hour_minute: Option<HoursMinutes>,
587 ) -> Self {
588 Self {
589 year,
590 month_day,
591 repeating_period_day_types,
592 hour_minutes,
593 date_range_of_week,
594 duration_hour_minute,
595 }
596 }
597 }
598 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
599 #[rasn(
600 automatic_tags,
601 identifier = "InternationalSign-applicableVehicleDimensions"
602 )]
603 pub struct InternationalSignApplicableVehicleDimensions {
604 #[rasn(identifier = "vehicleHeight")]
605 pub vehicle_height: Option<Distance>,
606 #[rasn(identifier = "vehicleWidth")]
607 pub vehicle_width: Option<Distance>,
608 #[rasn(identifier = "vehicleLength")]
609 pub vehicle_length: Option<Distance>,
610 #[rasn(identifier = "vehicleWeight")]
611 pub vehicle_weight: Option<Weight>,
612 }
613 impl InternationalSignApplicableVehicleDimensions {
614 pub fn new(
615 vehicle_height: Option<Distance>,
616 vehicle_width: Option<Distance>,
617 vehicle_length: Option<Distance>,
618 vehicle_weight: Option<Weight>,
619 ) -> Self {
620 Self {
621 vehicle_height,
622 vehicle_width,
623 vehicle_length,
624 vehicle_weight,
625 }
626 }
627 }
628 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
629 #[rasn(
630 automatic_tags,
631 identifier = "InternationalSign-destinationInformation"
632 )]
633 pub struct InternationalSignDestinationInformation {
634 #[rasn(value("1..=128"), identifier = "junctionDirection")]
635 pub junction_direction: Option<u8>,
636 #[rasn(value("1..=128"), identifier = "roundaboutCwDirection")]
637 pub roundabout_cw_direction: Option<u8>,
638 #[rasn(value("1..=128"), identifier = "roundaboutCcwDirection")]
639 pub roundabout_ccw_direction: Option<u8>,
640 #[rasn(identifier = "ioList")]
641 pub io_list: DDDIOLIST,
642 }
643 impl InternationalSignDestinationInformation {
644 pub fn new(
645 junction_direction: Option<u8>,
646 roundabout_cw_direction: Option<u8>,
647 roundabout_ccw_direction: Option<u8>,
648 io_list: DDDIOLIST,
649 ) -> Self {
650 Self {
651 junction_direction,
652 roundabout_cw_direction,
653 roundabout_ccw_direction,
654 io_list,
655 }
656 }
657 }
658 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
659 #[rasn(
660 delegate,
661 identifier = "InternationalSign-directionalFlowOfLane",
662 value("1..=8")
663 )]
664 pub struct InternationalSignDirectionalFlowOfLane(pub u8);
665 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
666 #[rasn(delegate, identifier = "InternationalSign-distanceBetweenVehicles")]
667 pub struct InternationalSignDistanceBetweenVehicles(pub Distance);
668 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
669 #[rasn(delegate, identifier = "InternationalSign-exemptedApplicablePeriod")]
670 pub struct InternationalSignExemptedApplicablePeriod(pub InternationalSignApplicablePeriod);
671 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
672 #[rasn(
673 delegate,
674 identifier = "InternationalSign-numberOfLane",
675 value("0..=99")
676 )]
677 pub struct InternationalSignNumberOfLane(pub u8);
678 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
679 #[rasn(
680 delegate,
681 identifier = "InternationalSign-rateOfIncline",
682 value("1..=32")
683 )]
684 pub struct InternationalSignRateOfIncline(pub u8);
685 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
686 #[rasn(automatic_tags, identifier = "InternationalSign-section")]
687 pub struct InternationalSignSection {
688 #[rasn(identifier = "startingPointLength")]
689 pub starting_point_length: Option<Distance>,
690 #[rasn(identifier = "continuityLength")]
691 pub continuity_length: Option<Distance>,
692 }
693 impl InternationalSignSection {
694 pub fn new(
695 starting_point_length: Option<Distance>,
696 continuity_length: Option<Distance>,
697 ) -> Self {
698 Self {
699 starting_point_length,
700 continuity_length,
701 }
702 }
703 }
704 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
705 #[rasn(automatic_tags, identifier = "InternationalSign-speedLimits")]
706 pub struct InternationalSignSpeedLimits {
707 #[rasn(value("0..=250"), identifier = "speedLimitMax")]
708 pub speed_limit_max: Option<u8>,
709 #[rasn(value("0..=250"), identifier = "speedLimitMin")]
710 pub speed_limit_min: Option<u8>,
711 #[rasn(value("0..=1"))]
712 pub unit: CodeUnits,
713 }
714 impl InternationalSignSpeedLimits {
715 pub fn new(
716 speed_limit_max: Option<u8>,
717 speed_limit_min: Option<u8>,
718 unit: CodeUnits,
719 ) -> Self {
720 Self {
721 speed_limit_max,
722 speed_limit_min,
723 unit,
724 }
725 }
726 }
727 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
728 #[rasn(automatic_tags)]
729 pub struct MonthDay {
730 #[rasn(value("1..=12"))]
731 pub month: u8,
732 #[rasn(value("1..=31"))]
733 pub day: u8,
734 }
735 impl MonthDay {
736 pub fn new(month: u8, day: u8) -> Self {
737 Self { month, day }
738 }
739 }
740 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
741 #[rasn(delegate)]
742 pub struct RepeatingPeriodDayTypes(pub FixedBitString<4usize>);
743 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
744 #[rasn(automatic_tags)]
745 pub struct Weight {
746 #[rasn(value("1..=16384"))]
747 pub value: u16,
748 #[rasn(value("10..=12"))]
749 pub unit: CodeUnits,
750 }
751 impl Weight {
752 pub fn new(value: u16, unit: CodeUnits) -> Self {
753 Self { value, unit }
754 }
755 }
756}
757#[allow(
758 non_camel_case_types,
759 non_snake_case,
760 non_upper_case_globals,
761 unused,
762 clippy::too_many_arguments
763)]
764pub mod ivi {
765 extern crate alloc;
766 use core::borrow::Borrow;
767
768 use rasn::prelude::*;
769
770 use super::super::cdd_2_2_1::etsi_its_cdd::{
771 ActionIdList,
772 Altitude,
773 DangerousGoodsBasic,
774 DeltaLatitude,
775 DeltaLongitude,
776 DeltaReferencePosition,
777 Direction,
778 EuVehicleCategoryCode,
779 Heading,
780 HeadingValue,
781 Identifier1B,
782 Iso3833VehicleType,
783 LanePosition,
784 LaneType,
785 LaneWidth,
786 Latitude,
787 Longitude,
788 MapReference,
789 Provider,
790 ReferencePosition,
791 RoadType,
792 SpecialTransportType,
793 Speed,
794 SpeedValue,
795 StandardLength9b,
796 StationType,
797 TimestampIts,
798 VarLengthNumber,
799 VehicleRole,
800 };
801 use super::efc_data_dictionary::{
802 AxleWeightLimits,
803 DieselEmissionValues,
804 EngineCharacteristics,
805 EnvironmentalCharacteristics,
806 ExhaustEmissionValues,
807 PassengerCapacity,
808 SoundLevel,
809 VehicleDimensions,
810 VehicleWeightLimits,
811 };
812 use super::gdd::{
813 InternationalSignApplicablePeriod,
814 InternationalSignApplicableVehicleDimensions,
815 InternationalSignDestinationInformation,
816 InternationalSignDirectionalFlowOfLane,
817 InternationalSignDistanceBetweenVehicles,
818 InternationalSignExemptedApplicablePeriod,
819 InternationalSignRateOfIncline,
820 InternationalSignSpeedLimits,
821 };
822 #[doc = " Extension in V3.1"]
823 #[doc = " Definition of Data Frames"]
824 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
825 #[rasn(automatic_tags)]
826 pub struct AbsolutePosition {
827 pub latitude: Latitude,
828 pub longitude: Longitude,
829 }
830 impl AbsolutePosition {
831 pub fn new(latitude: Latitude, longitude: Longitude) -> Self {
832 Self {
833 latitude,
834 longitude,
835 }
836 }
837 }
838 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
839 #[rasn(automatic_tags)]
840 pub struct AbsolutePositionWAltitude {
841 pub latitude: Latitude,
842 pub longitude: Longitude,
843 pub altitude: Altitude,
844 }
845 impl AbsolutePositionWAltitude {
846 pub fn new(latitude: Latitude, longitude: Longitude, altitude: Altitude) -> Self {
847 Self {
848 latitude,
849 longitude,
850 altitude,
851 }
852 }
853 }
854 #[doc = " Definition of data frames which are lists of data frames"]
855 #[doc = " note: those definitions are to avoid \"implicit type definitions\" but are bit compatible with V1"]
856 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
857 #[rasn(delegate, size("1..=8", extensible))]
858 pub struct AbsolutePositions(pub SequenceOf<AbsolutePosition>);
859 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
860 #[rasn(delegate, size("1..=8", extensible))]
861 pub struct AbsolutePositionsWAltitude(pub SequenceOf<AbsolutePositionWAltitude>);
862 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
863 #[rasn(automatic_tags)]
864 pub struct AnyCatalogue {
865 pub owner: Provider,
866 #[rasn(value("0..=255"))]
867 pub version: u8,
868 #[rasn(value("0..=65535"), identifier = "pictogramCode")]
869 pub pictogram_code: u16,
870 #[rasn(value("0..=65535"))]
871 pub value: Option<u16>,
872 pub unit: Option<RSCUnit>,
873 pub attributes: Option<ISO14823Attributes>,
874 }
875 impl AnyCatalogue {
876 pub fn new(
877 owner: Provider,
878 version: u8,
879 pictogram_code: u16,
880 value: Option<u16>,
881 unit: Option<RSCUnit>,
882 attributes: Option<ISO14823Attributes>,
883 ) -> Self {
884 Self {
885 owner,
886 version,
887 pictogram_code,
888 value,
889 unit,
890 attributes,
891 }
892 }
893 }
894 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
895 #[rasn(delegate, size("1..=16", extensible))]
896 pub struct AutomatedVehicleContainer(pub SequenceOf<AvcPart>);
897 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
898 #[rasn(automatic_tags)]
899 #[non_exhaustive]
900 pub struct AutomatedVehicleRule {
901 pub priority: PriorityLevel,
902 #[rasn(identifier = "allowedSaeAutomationLevels")]
903 pub allowed_sae_automation_levels: SaeAutomationLevels,
904 #[rasn(identifier = "minGapBetweenVehicles")]
905 pub min_gap_between_vehicles: Option<GapBetweenVehicles>,
906 #[rasn(identifier = "recGapBetweenVehicles")]
907 pub rec_gap_between_vehicles: Option<GapBetweenVehicles>,
908 #[rasn(identifier = "automatedVehicleMaxSpeedLimit")]
909 pub automated_vehicle_max_speed_limit: Option<SpeedValue>,
910 #[rasn(identifier = "automatedVehicleMinSpeedLimit")]
911 pub automated_vehicle_min_speed_limit: Option<SpeedValue>,
912 #[rasn(identifier = "automatedVehicleSpeedRecommendation")]
913 pub automated_vehicle_speed_recommendation: Option<SpeedValue>,
914 #[rasn(identifier = "roadSignCodes")]
915 pub road_sign_codes: Option<RoadSignCodes>,
916 #[rasn(identifier = "extraText")]
917 pub extra_text: Option<ConstraintTextLines2>,
918 }
919 impl AutomatedVehicleRule {
920 pub fn new(
921 priority: PriorityLevel,
922 allowed_sae_automation_levels: SaeAutomationLevels,
923 min_gap_between_vehicles: Option<GapBetweenVehicles>,
924 rec_gap_between_vehicles: Option<GapBetweenVehicles>,
925 automated_vehicle_max_speed_limit: Option<SpeedValue>,
926 automated_vehicle_min_speed_limit: Option<SpeedValue>,
927 automated_vehicle_speed_recommendation: Option<SpeedValue>,
928 road_sign_codes: Option<RoadSignCodes>,
929 extra_text: Option<ConstraintTextLines2>,
930 ) -> Self {
931 Self {
932 priority,
933 allowed_sae_automation_levels,
934 min_gap_between_vehicles,
935 rec_gap_between_vehicles,
936 automated_vehicle_max_speed_limit,
937 automated_vehicle_min_speed_limit,
938 automated_vehicle_speed_recommendation,
939 road_sign_codes,
940 extra_text,
941 }
942 }
943 }
944 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
945 #[rasn(delegate, size("1..=5"))]
946 pub struct AutomatedVehicleRules(pub SequenceOf<AutomatedVehicleRule>);
947 #[doc = " new container in V2"]
948 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
949 #[rasn(automatic_tags)]
950 #[non_exhaustive]
951 pub struct AvcPart {
952 #[rasn(identifier = "detectionZoneIds")]
953 pub detection_zone_ids: Option<ZoneIds>,
954 #[rasn(identifier = "relevanceZoneIds")]
955 pub relevance_zone_ids: ZoneIds,
956 pub direction: Option<Direction>,
957 #[rasn(identifier = "applicableLanes")]
958 pub applicable_lanes: Option<LanePositions>,
959 #[rasn(identifier = "vehicleCharacteristics")]
960 pub vehicle_characteristics: Option<VehicleCharacteristicsList>,
961 #[rasn(identifier = "automatedVehicleRules")]
962 pub automated_vehicle_rules: Option<AutomatedVehicleRules>,
963 #[rasn(identifier = "platooningRules")]
964 pub platooning_rules: Option<PlatooningRules>,
965 }
966 impl AvcPart {
967 pub fn new(
968 detection_zone_ids: Option<ZoneIds>,
969 relevance_zone_ids: ZoneIds,
970 direction: Option<Direction>,
971 applicable_lanes: Option<LanePositions>,
972 vehicle_characteristics: Option<VehicleCharacteristicsList>,
973 automated_vehicle_rules: Option<AutomatedVehicleRules>,
974 platooning_rules: Option<PlatooningRules>,
975 ) -> Self {
976 Self {
977 detection_zone_ids,
978 relevance_zone_ids,
979 direction,
980 applicable_lanes,
981 vehicle_characteristics,
982 automated_vehicle_rules,
983 platooning_rules,
984 }
985 }
986 }
987 #[doc = " Defition of IVI specific data elements "]
988 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
989 #[rasn(delegate, value("-20..=21"))]
990 pub struct BankingAngle(pub i8);
991 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
992 #[rasn(delegate, value("0..=3"))]
993 pub struct ComparisonOperator(pub u8);
994 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
995 #[rasn(automatic_tags)]
996 pub struct CompleteVehicleCharacteristics {
997 pub tractor: Option<TractorCharacteristics>,
998 pub trailer: Option<TrailerCharacteristicsList>,
999 pub train: Option<TrainCharacteristics>,
1000 }
1001 impl CompleteVehicleCharacteristics {
1002 pub fn new(
1003 tractor: Option<TractorCharacteristics>,
1004 trailer: Option<TrailerCharacteristicsList>,
1005 train: Option<TrainCharacteristics>,
1006 ) -> Self {
1007 Self {
1008 tractor,
1009 trailer,
1010 train,
1011 }
1012 }
1013 }
1014 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1015 #[rasn(automatic_tags)]
1016 pub struct ComputedSegment {
1017 #[rasn(identifier = "zoneId")]
1018 pub zone_id: Zid,
1019 #[rasn(identifier = "laneNumber")]
1020 pub lane_number: LanePosition,
1021 #[rasn(identifier = "laneWidth")]
1022 pub lane_width: LaneWidth,
1023 #[rasn(value("-32768..=32767"), identifier = "offsetDistance")]
1024 pub offset_distance: Option<i16>,
1025 #[rasn(identifier = "offsetPosition")]
1026 pub offset_position: Option<DeltaReferencePosition>,
1027 }
1028 impl ComputedSegment {
1029 pub fn new(
1030 zone_id: Zid,
1031 lane_number: LanePosition,
1032 lane_width: LaneWidth,
1033 offset_distance: Option<i16>,
1034 offset_position: Option<DeltaReferencePosition>,
1035 ) -> Self {
1036 Self {
1037 zone_id,
1038 lane_number,
1039 lane_width,
1040 offset_distance,
1041 offset_position,
1042 }
1043 }
1044 }
1045 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1046 #[rasn(delegate, value("0..=15", extensible))]
1047 pub struct Condition(pub Integer);
1048 #[doc = "size extension corrected in V3.1"]
1049 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1050 #[rasn(delegate, size("1..=4", extensible))]
1051 pub struct ConstraintTextLines1(pub SequenceOf<Text>);
1052 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1053 #[rasn(delegate, size("1..=4", extensible))]
1054 pub struct ConstraintTextLines2(pub SequenceOf<Text>);
1055 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1056 #[rasn(delegate, value("0..=127", extensible))]
1057 pub struct ContentId(pub Integer);
1058 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1059 #[rasn(delegate, value("0..=7", extensible))]
1060 pub struct DefinitionAccuracy(pub Integer);
1061 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1062 #[rasn(automatic_tags)]
1063 pub struct DeltaPosition {
1064 #[rasn(identifier = "deltaLatitude")]
1065 pub delta_latitude: DeltaLatitude,
1066 #[rasn(identifier = "deltaLongitude")]
1067 pub delta_longitude: DeltaLongitude,
1068 }
1069 impl DeltaPosition {
1070 pub fn new(delta_latitude: DeltaLatitude, delta_longitude: DeltaLongitude) -> Self {
1071 Self {
1072 delta_latitude,
1073 delta_longitude,
1074 }
1075 }
1076 }
1077 #[doc = " new DF in V2"]
1078 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1079 #[rasn(delegate, size("1..=32", extensible))]
1080 pub struct DeltaPositions(pub SequenceOf<DeltaPosition>);
1081 #[doc = "size extension corrected in V3.1"]
1082 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1083 #[rasn(delegate, size("1..=32", extensible))]
1084 pub struct DeltaReferencePositions(pub SequenceOf<DeltaReferencePosition>);
1085 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1086 #[rasn(delegate, value("0..=255"))]
1087 pub struct Depth(pub u8);
1088 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1089 #[rasn(delegate, value("0..=3"))]
1090 pub struct DriverCharacteristics(pub u8);
1091 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1092 #[rasn(delegate, value("0..=101"))]
1093 pub struct FrictionCoefficient(pub u8);
1094 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1095 #[rasn(delegate, value("0..=255"))]
1096 pub struct GapBetweenVehicles(pub u8);
1097 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1098 #[rasn(delegate, size("1..=16", extensible))]
1099 pub struct GeneralIviContainer(pub SequenceOf<GicPart>);
1100 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1101 #[rasn(automatic_tags)]
1102 #[non_exhaustive]
1103 pub struct GeographicLocationContainer {
1104 #[rasn(identifier = "referencePosition")]
1105 pub reference_position: ReferencePosition,
1106 #[rasn(identifier = "referencePositionTime")]
1107 pub reference_position_time: Option<TimestampIts>,
1108 #[rasn(identifier = "referencePositionHeading")]
1109 pub reference_position_heading: Option<Heading>,
1110 #[rasn(identifier = "referencePositionSpeed")]
1111 pub reference_position_speed: Option<Speed>,
1112 pub parts: GlcParts,
1113 }
1114 impl GeographicLocationContainer {
1115 pub fn new(
1116 reference_position: ReferencePosition,
1117 reference_position_time: Option<TimestampIts>,
1118 reference_position_heading: Option<Heading>,
1119 reference_position_speed: Option<Speed>,
1120 parts: GlcParts,
1121 ) -> Self {
1122 Self {
1123 reference_position,
1124 reference_position_time,
1125 reference_position_heading,
1126 reference_position_speed,
1127 parts,
1128 }
1129 }
1130 }
1131 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1132 #[rasn(automatic_tags)]
1133 #[non_exhaustive]
1134 pub struct GicPart {
1135 #[rasn(identifier = "detectionZoneIds")]
1136 pub detection_zone_ids: Option<ZoneIds>,
1137 #[rasn(identifier = "its-Rrid")]
1138 pub its_rrid: Option<VarLengthNumber>,
1139 #[rasn(identifier = "relevanceZoneIds")]
1140 pub relevance_zone_ids: Option<ZoneIds>,
1141 pub direction: Option<Direction>,
1142 #[rasn(identifier = "driverAwarenessZoneIds")]
1143 pub driver_awareness_zone_ids: Option<ZoneIds>,
1144 #[rasn(value("0..=255"), identifier = "minimumAwarenessTime")]
1145 pub minimum_awareness_time: Option<u8>,
1146 #[rasn(identifier = "applicableLanes")]
1147 pub applicable_lanes: Option<LanePositions>,
1148 #[rasn(identifier = "iviType")]
1149 pub ivi_type: IviType,
1150 #[rasn(identifier = "iviPurpose")]
1151 pub ivi_purpose: Option<IviPurpose>,
1152 #[rasn(identifier = "laneStatus")]
1153 pub lane_status: Option<LaneStatus>,
1154 #[rasn(identifier = "vehicleCharacteristics")]
1155 pub vehicle_characteristics: Option<VehicleCharacteristicsList>,
1156 #[rasn(identifier = "driverCharacteristics")]
1157 pub driver_characteristics: Option<DriverCharacteristics>,
1158 #[rasn(value("1..=4", extensible), identifier = "layoutId")]
1159 pub layout_id: Option<Integer>,
1160 #[rasn(value("1..=64", extensible), identifier = "preStoredlayoutId")]
1161 pub pre_storedlayout_id: Option<Integer>,
1162 #[rasn(identifier = "roadSignCodes")]
1163 pub road_sign_codes: RoadSignCodes,
1164 #[rasn(identifier = "extraText")]
1165 pub extra_text: Option<ConstraintTextLines1>,
1166 }
1167 impl GicPart {
1168 pub fn new(
1169 detection_zone_ids: Option<ZoneIds>,
1170 its_rrid: Option<VarLengthNumber>,
1171 relevance_zone_ids: Option<ZoneIds>,
1172 direction: Option<Direction>,
1173 driver_awareness_zone_ids: Option<ZoneIds>,
1174 minimum_awareness_time: Option<u8>,
1175 applicable_lanes: Option<LanePositions>,
1176 ivi_type: IviType,
1177 ivi_purpose: Option<IviPurpose>,
1178 lane_status: Option<LaneStatus>,
1179 vehicle_characteristics: Option<VehicleCharacteristicsList>,
1180 driver_characteristics: Option<DriverCharacteristics>,
1181 layout_id: Option<Integer>,
1182 pre_storedlayout_id: Option<Integer>,
1183 road_sign_codes: RoadSignCodes,
1184 extra_text: Option<ConstraintTextLines1>,
1185 ) -> Self {
1186 Self {
1187 detection_zone_ids,
1188 its_rrid,
1189 relevance_zone_ids,
1190 direction,
1191 driver_awareness_zone_ids,
1192 minimum_awareness_time,
1193 applicable_lanes,
1194 ivi_type,
1195 ivi_purpose,
1196 lane_status,
1197 vehicle_characteristics,
1198 driver_characteristics,
1199 layout_id,
1200 pre_storedlayout_id,
1201 road_sign_codes,
1202 extra_text,
1203 }
1204 }
1205 }
1206 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1207 #[rasn(automatic_tags)]
1208 #[non_exhaustive]
1209 pub struct GlcPart {
1210 #[rasn(identifier = "zoneId")]
1211 pub zone_id: Zid,
1212 #[rasn(identifier = "laneNumber")]
1213 pub lane_number: Option<LanePosition>,
1214 #[rasn(value("0..=255"), identifier = "zoneExtension")]
1215 pub zone_extension: Option<u8>,
1216 #[rasn(identifier = "zoneHeading")]
1217 pub zone_heading: Option<HeadingValue>,
1218 pub zone: Option<Zone>,
1219 }
1220 impl GlcPart {
1221 pub fn new(
1222 zone_id: Zid,
1223 lane_number: Option<LanePosition>,
1224 zone_extension: Option<u8>,
1225 zone_heading: Option<HeadingValue>,
1226 zone: Option<Zone>,
1227 ) -> Self {
1228 Self {
1229 zone_id,
1230 lane_number,
1231 zone_extension,
1232 zone_heading,
1233 zone,
1234 }
1235 }
1236 }
1237 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1238 #[rasn(delegate, size("1..=16", extensible))]
1239 pub struct GlcParts(pub SequenceOf<GlcPart>);
1240 #[doc = " new DE in V2"]
1241 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1242 #[rasn(delegate, value("0..=15", extensible))]
1243 pub struct GoodsType(pub Integer);
1244 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1245 #[rasn(choice, automatic_tags)]
1246 pub enum ISO14823Attribute {
1247 dtm(InternationalSignApplicablePeriod),
1248 edt(InternationalSignExemptedApplicablePeriod),
1249 dfl(InternationalSignDirectionalFlowOfLane),
1250 ved(InternationalSignApplicableVehicleDimensions),
1251 spe(InternationalSignSpeedLimits),
1252 roi(InternationalSignRateOfIncline),
1253 dbv(InternationalSignDistanceBetweenVehicles),
1254 ddd(InternationalSignDestinationInformation),
1255 }
1256 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1257 #[rasn(delegate, size("1..=8", extensible))]
1258 pub struct ISO14823Attributes(pub SequenceOf<ISO14823Attribute>);
1259 #[doc = " Inner type "]
1260 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash, Copy)]
1261 #[rasn(enumerated)]
1262 #[non_exhaustive]
1263 pub enum ISO14823CodePictogramCodeServiceCategoryCodeTrafficSignPictogram {
1264 dangerWarning = 0,
1265 regulatory = 1,
1266 informative = 2,
1267 }
1268 #[doc = " Inner type "]
1269 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash, Copy)]
1270 #[rasn(enumerated)]
1271 #[non_exhaustive]
1272 pub enum ISO14823CodePictogramCodeServiceCategoryCodePublicFacilitiesPictogram {
1273 publicFacilities = 0,
1274 }
1275 #[doc = " Inner type "]
1276 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash, Copy)]
1277 #[rasn(enumerated)]
1278 #[non_exhaustive]
1279 pub enum ISO14823CodePictogramCodeServiceCategoryCodeAmbientOrRoadConditionPictogram {
1280 ambientCondition = 0,
1281 roadCondition = 1,
1282 }
1283 #[doc = " Inner type "]
1284 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash, Copy)]
1285 #[rasn(enumerated)]
1286 #[non_exhaustive]
1287 pub enum ISO14823CodePictogramCodeServiceCategoryCodeSupplementaryPanel {
1288 supplementaryPanelAndAdditionalPanel = 0,
1289 }
1290 #[doc = " Inner type "]
1291 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1292 #[rasn(choice, automatic_tags)]
1293 #[non_exhaustive]
1294 pub enum ISO14823CodePictogramCodeServiceCategoryCode {
1295 trafficSignPictogram(ISO14823CodePictogramCodeServiceCategoryCodeTrafficSignPictogram),
1296 publicFacilitiesPictogram(
1297 ISO14823CodePictogramCodeServiceCategoryCodePublicFacilitiesPictogram,
1298 ),
1299 ambientOrRoadConditionPictogram(
1300 ISO14823CodePictogramCodeServiceCategoryCodeAmbientOrRoadConditionPictogram,
1301 ),
1302 #[rasn(extension_addition)]
1303 supplementaryPanel(ISO14823CodePictogramCodeServiceCategoryCodeSupplementaryPanel),
1304 }
1305 #[doc = " Inner type "]
1306 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1307 #[rasn(automatic_tags)]
1308 pub struct ISO14823CodePictogramCodePictogramCategoryCode {
1309 #[rasn(value("1..=9"))]
1310 pub nature: u8,
1311 #[rasn(value("0..=99"), identifier = "serialNumber")]
1312 pub serial_number: u8,
1313 }
1314 impl ISO14823CodePictogramCodePictogramCategoryCode {
1315 pub fn new(nature: u8, serial_number: u8) -> Self {
1316 Self {
1317 nature,
1318 serial_number,
1319 }
1320 }
1321 }
1322 #[doc = " Inner type "]
1323 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1324 #[rasn(automatic_tags)]
1325 pub struct ISO14823CodePictogramCode {
1326 #[rasn(size("2"), identifier = "countryCode")]
1327 pub country_code: Option<OctetString>,
1328 #[rasn(identifier = "serviceCategoryCode")]
1329 pub service_category_code: ISO14823CodePictogramCodeServiceCategoryCode,
1330 #[rasn(identifier = "pictogramCategoryCode")]
1331 pub pictogram_category_code: ISO14823CodePictogramCodePictogramCategoryCode,
1332 }
1333 impl ISO14823CodePictogramCode {
1334 pub fn new(
1335 country_code: Option<OctetString>,
1336 service_category_code: ISO14823CodePictogramCodeServiceCategoryCode,
1337 pictogram_category_code: ISO14823CodePictogramCodePictogramCategoryCode,
1338 ) -> Self {
1339 Self {
1340 country_code,
1341 service_category_code,
1342 pictogram_category_code,
1343 }
1344 }
1345 }
1346 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1347 #[rasn(automatic_tags)]
1348 pub struct ISO14823Code {
1349 #[rasn(identifier = "pictogramCode")]
1350 pub pictogram_code: ISO14823CodePictogramCode,
1351 pub attributes: Option<ISO14823Attributes>,
1352 }
1353 impl ISO14823Code {
1354 pub fn new(
1355 pictogram_code: ISO14823CodePictogramCode,
1356 attributes: Option<ISO14823Attributes>,
1357 ) -> Self {
1358 Self {
1359 pictogram_code,
1360 attributes,
1361 }
1362 }
1363 }
1364 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1365 #[rasn(delegate, size("1..=16", extensible))]
1366 pub struct InfrastructureSupportContainer(pub SequenceOf<IscPart>);
1367 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1368 #[rasn(automatic_tags)]
1369 #[non_exhaustive]
1370 pub struct InfrastructureSupportInformation {
1371 #[rasn(identifier = "baseOid")]
1372 pub base_oid: Option<ObjectIdentifier>,
1373 #[rasn(identifier = "supportList")]
1374 pub support_list: SupportItems,
1375 }
1376 impl InfrastructureSupportInformation {
1377 pub fn new(base_oid: Option<ObjectIdentifier>, support_list: SupportItems) -> Self {
1378 Self {
1379 base_oid,
1380 support_list,
1381 }
1382 }
1383 }
1384 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1385 #[rasn(automatic_tags)]
1386 #[non_exhaustive]
1387 pub struct IscPart {
1388 #[rasn(identifier = "detectionZoneIds")]
1389 pub detection_zone_ids: Option<ZoneIds>,
1390 #[rasn(identifier = "relevanceZoneIds")]
1391 pub relevance_zone_ids: ZoneIds,
1392 pub direction: Option<Direction>,
1393 #[rasn(identifier = "infrastructureSupport")]
1394 pub infrastructure_support: InfrastructureSupportInformation,
1395 }
1396 impl IscPart {
1397 pub fn new(
1398 detection_zone_ids: Option<ZoneIds>,
1399 relevance_zone_ids: ZoneIds,
1400 direction: Option<Direction>,
1401 infrastructure_support: InfrastructureSupportInformation,
1402 ) -> Self {
1403 Self {
1404 detection_zone_ids,
1405 relevance_zone_ids,
1406 direction,
1407 infrastructure_support,
1408 }
1409 }
1410 }
1411 #[doc = "size extension in V3.1"]
1412 #[doc = "Definition of Containers"]
1413 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1414 #[rasn(choice, automatic_tags)]
1415 #[non_exhaustive]
1416 pub enum IviContainer {
1417 glc(GeographicLocationContainer),
1418 giv(GeneralIviContainer),
1419 rcc(RoadConfigurationContainer),
1420 tc(TextContainer),
1421 lac(LayoutContainer),
1422 #[rasn(extension_addition)]
1423 avc(AutomatedVehicleContainer),
1424 #[rasn(extension_addition)]
1425 mlc(MapLocationContainer),
1426 #[rasn(extension_addition)]
1427 rsc(RoadSurfaceContainer),
1428 #[rasn(extension_addition)]
1429 isc(InfrastructureSupportContainer),
1430 }
1431 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1432 #[rasn(delegate, size("1..=8", extensible))]
1433 pub struct IviContainers(pub SequenceOf<IviContainer>);
1434 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1435 #[rasn(delegate, value("1..=32767", extensible))]
1436 pub struct IviIdentificationNumber(pub Integer);
1437 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1438 #[rasn(delegate, size("1..=8"))]
1439 pub struct IviIdentificationNumbers(pub SequenceOf<IviIdentificationNumber>);
1440 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1441 #[rasn(automatic_tags)]
1442 #[non_exhaustive]
1443 pub struct IviManagementContainer {
1444 #[rasn(identifier = "serviceProviderId")]
1445 pub service_provider_id: Provider,
1446 #[rasn(identifier = "iviIdentificationNumber")]
1447 pub ivi_identification_number: IviIdentificationNumber,
1448 #[rasn(identifier = "timeStamp")]
1449 pub time_stamp: Option<TimestampIts>,
1450 #[rasn(identifier = "validFrom")]
1451 pub valid_from: Option<TimestampIts>,
1452 #[rasn(identifier = "validTo")]
1453 pub valid_to: Option<TimestampIts>,
1454 #[rasn(identifier = "connectedIviStructures")]
1455 pub connected_ivi_structures: Option<IviIdentificationNumbers>,
1456 #[rasn(identifier = "iviStatus")]
1457 pub ivi_status: IviStatus,
1458 #[rasn(extension_addition, identifier = "connectedDenms")]
1459 pub connected_denms: Option<ActionIdList>,
1460 }
1461 impl IviManagementContainer {
1462 pub fn new(
1463 service_provider_id: Provider,
1464 ivi_identification_number: IviIdentificationNumber,
1465 time_stamp: Option<TimestampIts>,
1466 valid_from: Option<TimestampIts>,
1467 valid_to: Option<TimestampIts>,
1468 connected_ivi_structures: Option<IviIdentificationNumbers>,
1469 ivi_status: IviStatus,
1470 connected_denms: Option<ActionIdList>,
1471 ) -> Self {
1472 Self {
1473 service_provider_id,
1474 ivi_identification_number,
1475 time_stamp,
1476 valid_from,
1477 valid_to,
1478 connected_ivi_structures,
1479 ivi_status,
1480 connected_denms,
1481 }
1482 }
1483 }
1484 #[doc = " extension in V3.1"]
1485 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1486 #[rasn(delegate, value("0..=3"))]
1487 pub struct IviPurpose(pub u8);
1488 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1489 #[rasn(delegate, value("0..=7"))]
1490 pub struct IviStatus(pub u8);
1491 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1492 #[rasn(automatic_tags)]
1493 pub struct IviStructure {
1494 pub mandatory: IviManagementContainer,
1495 pub optional: Option<IviContainers>,
1496 }
1497 impl IviStructure {
1498 pub fn new(mandatory: IviManagementContainer, optional: Option<IviContainers>) -> Self {
1499 Self {
1500 mandatory,
1501 optional,
1502 }
1503 }
1504 }
1505 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1506 #[rasn(delegate, value("0..=7"))]
1507 pub struct IviType(pub u8);
1508 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1509 #[rasn(automatic_tags)]
1510 pub struct LaneCharacteristics {
1511 #[rasn(identifier = "zoneDefinitionAccuracy")]
1512 pub zone_definition_accuracy: DefinitionAccuracy,
1513 #[rasn(identifier = "existinglaneMarkingStatus")]
1514 pub existinglane_marking_status: LaneMarkingStatus,
1515 #[rasn(identifier = "newlaneMarkingColour")]
1516 pub newlane_marking_colour: MarkingColour,
1517 #[rasn(identifier = "laneDelimitationLeft")]
1518 pub lane_delimitation_left: LaneDelimitation,
1519 #[rasn(identifier = "laneDelimitationRight")]
1520 pub lane_delimitation_right: LaneDelimitation,
1521 #[rasn(identifier = "mergingWith")]
1522 pub merging_with: Zid,
1523 }
1524 impl LaneCharacteristics {
1525 pub fn new(
1526 zone_definition_accuracy: DefinitionAccuracy,
1527 existinglane_marking_status: LaneMarkingStatus,
1528 newlane_marking_colour: MarkingColour,
1529 lane_delimitation_left: LaneDelimitation,
1530 lane_delimitation_right: LaneDelimitation,
1531 merging_with: Zid,
1532 ) -> Self {
1533 Self {
1534 zone_definition_accuracy,
1535 existinglane_marking_status,
1536 newlane_marking_colour,
1537 lane_delimitation_left,
1538 lane_delimitation_right,
1539 merging_with,
1540 }
1541 }
1542 }
1543 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1544 #[rasn(delegate, size("1..=16", extensible))]
1545 pub struct LaneConfiguration(pub SequenceOf<LaneInformation>);
1546 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1547 #[rasn(delegate, value("0..=7", extensible))]
1548 pub struct LaneDelimitation(pub Integer);
1549 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1550 #[rasn(delegate, size("1..=16", extensible))]
1551 pub struct LaneIds(pub SequenceOf<Identifier1B>);
1552 #[doc = " Inner type "]
1553 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1554 #[rasn(automatic_tags)]
1555 pub struct LaneInformationExtGroupDetectionZoneIds {
1556 #[rasn(identifier = "detectionZoneIds")]
1557 pub detection_zone_ids: Option<ZoneIds>,
1558 #[rasn(identifier = "relevanceZoneIds")]
1559 pub relevance_zone_ids: Option<ZoneIds>,
1560 #[rasn(identifier = "laneCharacteristics")]
1561 pub lane_characteristics: Option<LaneCharacteristics>,
1562 #[rasn(identifier = "laneSurfaceStaticCharacteristics")]
1563 pub lane_surface_static_characteristics: Option<RoadSurfaceStaticCharacteristics>,
1564 #[rasn(identifier = "laneSurfaceDynamicCharacteristics")]
1565 pub lane_surface_dynamic_characteristics: Option<RoadSurfaceDynamicCharacteristics>,
1566 }
1567 impl LaneInformationExtGroupDetectionZoneIds {
1568 pub fn new(
1569 detection_zone_ids: Option<ZoneIds>,
1570 relevance_zone_ids: Option<ZoneIds>,
1571 lane_characteristics: Option<LaneCharacteristics>,
1572 lane_surface_static_characteristics: Option<RoadSurfaceStaticCharacteristics>,
1573 lane_surface_dynamic_characteristics: Option<RoadSurfaceDynamicCharacteristics>,
1574 ) -> Self {
1575 Self {
1576 detection_zone_ids,
1577 relevance_zone_ids,
1578 lane_characteristics,
1579 lane_surface_static_characteristics,
1580 lane_surface_dynamic_characteristics,
1581 }
1582 }
1583 }
1584 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1585 #[rasn(automatic_tags)]
1586 #[non_exhaustive]
1587 pub struct LaneInformation {
1588 #[rasn(identifier = "laneNumber")]
1589 pub lane_number: LanePosition,
1590 pub direction: Direction,
1591 pub validity: Option<InternationalSignApplicablePeriod>,
1592 #[rasn(identifier = "laneType")]
1593 pub lane_type: LaneType,
1594 #[rasn(identifier = "laneTypeQualifier")]
1595 pub lane_type_qualifier: Option<CompleteVehicleCharacteristics>,
1596 #[rasn(identifier = "laneStatus")]
1597 pub lane_status: LaneStatus,
1598 #[rasn(identifier = "laneWidth")]
1599 pub lane_width: Option<LaneWidth>,
1600 #[rasn(extension_addition_group, identifier = "SEQUENCE")]
1601 pub ext_group_detection_zone_ids: Option<LaneInformationExtGroupDetectionZoneIds>,
1602 }
1603 impl LaneInformation {
1604 pub fn new(
1605 lane_number: LanePosition,
1606 direction: Direction,
1607 validity: Option<InternationalSignApplicablePeriod>,
1608 lane_type: LaneType,
1609 lane_type_qualifier: Option<CompleteVehicleCharacteristics>,
1610 lane_status: LaneStatus,
1611 lane_width: Option<LaneWidth>,
1612 ext_group_detection_zone_ids: Option<LaneInformationExtGroupDetectionZoneIds>,
1613 ) -> Self {
1614 Self {
1615 lane_number,
1616 direction,
1617 validity,
1618 lane_type,
1619 lane_type_qualifier,
1620 lane_status,
1621 lane_width,
1622 ext_group_detection_zone_ids,
1623 }
1624 }
1625 }
1626 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash, Copy)]
1627 #[rasn(delegate)]
1628 pub struct LaneMarkingStatus(pub bool);
1629 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1630 #[rasn(delegate, size("1..=8", extensible))]
1631 pub struct LanePositions(pub SequenceOf<LanePosition>);
1632 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1633 #[rasn(delegate, value("0..=7", extensible))]
1634 pub struct LaneStatus(pub Integer);
1635 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1636 #[rasn(automatic_tags)]
1637 pub struct LayoutComponent {
1638 #[rasn(value("1..=8", extensible), identifier = "layoutComponentId")]
1639 pub layout_component_id: Integer,
1640 #[rasn(value("10..=73"))]
1641 pub height: u8,
1642 #[rasn(value("10..=265"))]
1643 pub width: u16,
1644 #[rasn(value("10..=265"))]
1645 pub x: u16,
1646 #[rasn(value("10..=73"))]
1647 pub y: u8,
1648 #[rasn(value("0..=1"), identifier = "textScripting")]
1649 pub text_scripting: u8,
1650 }
1651 impl LayoutComponent {
1652 pub fn new(
1653 layout_component_id: Integer,
1654 height: u8,
1655 width: u16,
1656 x: u16,
1657 y: u8,
1658 text_scripting: u8,
1659 ) -> Self {
1660 Self {
1661 layout_component_id,
1662 height,
1663 width,
1664 x,
1665 y,
1666 text_scripting,
1667 }
1668 }
1669 }
1670 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1671 #[rasn(delegate, size("1..=4", extensible))]
1672 pub struct LayoutComponents(pub SequenceOf<LayoutComponent>);
1673 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1674 #[rasn(automatic_tags)]
1675 #[non_exhaustive]
1676 pub struct LayoutContainer {
1677 #[rasn(value("1..=4", extensible), identifier = "layoutId")]
1678 pub layout_id: Integer,
1679 #[rasn(value("10..=73"))]
1680 pub height: Option<u8>,
1681 #[rasn(value("10..=265"))]
1682 pub width: Option<u16>,
1683 #[rasn(identifier = "layoutComponents")]
1684 pub layout_components: LayoutComponents,
1685 }
1686 impl LayoutContainer {
1687 pub fn new(
1688 layout_id: Integer,
1689 height: Option<u8>,
1690 width: Option<u16>,
1691 layout_components: LayoutComponents,
1692 ) -> Self {
1693 Self {
1694 layout_id,
1695 height,
1696 width,
1697 layout_components,
1698 }
1699 }
1700 }
1701 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1702 #[rasn(automatic_tags)]
1703 pub struct LoadType {
1704 #[rasn(identifier = "goodsType")]
1705 pub goods_type: GoodsType,
1706 #[rasn(identifier = "dangerousGoodsType")]
1707 pub dangerous_goods_type: DangerousGoodsBasic,
1708 #[rasn(identifier = "specialTransportType")]
1709 pub special_transport_type: SpecialTransportType,
1710 }
1711 impl LoadType {
1712 pub fn new(
1713 goods_type: GoodsType,
1714 dangerous_goods_type: DangerousGoodsBasic,
1715 special_transport_type: SpecialTransportType,
1716 ) -> Self {
1717 Self {
1718 goods_type,
1719 dangerous_goods_type,
1720 special_transport_type,
1721 }
1722 }
1723 }
1724 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1725 #[rasn(automatic_tags)]
1726 pub struct MapLocationContainer {
1727 pub reference: MapReference,
1728 pub parts: MlcParts,
1729 }
1730 impl MapLocationContainer {
1731 pub fn new(reference: MapReference, parts: MlcParts) -> Self {
1732 Self { reference, parts }
1733 }
1734 }
1735 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1736 #[rasn(delegate, value("0..=7", extensible))]
1737 pub struct MarkingColour(pub Integer);
1738 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1739 #[rasn(delegate, value("0..=7", extensible))]
1740 pub struct MaterialType(pub Integer);
1741 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1742 #[rasn(delegate, value("1..=64"))]
1743 pub struct MaxLenghtOfPlatoon(pub u8);
1744 #[doc = " new DE in V2"]
1745 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1746 #[rasn(delegate, value("2..=64"))]
1747 pub struct MaxNoOfVehicles(pub u8);
1748 #[doc = " new container part in V2"]
1749 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1750 #[rasn(automatic_tags)]
1751 pub struct MlcPart {
1752 #[rasn(identifier = "zoneId")]
1753 pub zone_id: Zid,
1754 #[rasn(identifier = "laneIds")]
1755 pub lane_ids: Option<LaneIds>,
1756 }
1757 impl MlcPart {
1758 pub fn new(zone_id: Zid, lane_ids: Option<LaneIds>) -> Self {
1759 Self { zone_id, lane_ids }
1760 }
1761 }
1762 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1763 #[rasn(delegate, size("1..=16", extensible))]
1764 pub struct MlcParts(pub SequenceOf<MlcPart>);
1765 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1766 #[rasn(automatic_tags)]
1767 #[non_exhaustive]
1768 pub struct PlatooningRule {
1769 pub priority: PriorityLevel,
1770 #[rasn(identifier = "allowedSaeAutomationLevels")]
1771 pub allowed_sae_automation_levels: SaeAutomationLevels,
1772 #[rasn(identifier = "maxNoOfVehicles")]
1773 pub max_no_of_vehicles: Option<MaxNoOfVehicles>,
1774 #[rasn(identifier = "maxLenghtOfPlatoon")]
1775 pub max_lenght_of_platoon: Option<MaxLenghtOfPlatoon>,
1776 #[rasn(identifier = "minGapBetweenVehicles")]
1777 pub min_gap_between_vehicles: Option<GapBetweenVehicles>,
1778 #[rasn(identifier = "platoonMaxSpeedLimit")]
1779 pub platoon_max_speed_limit: Option<SpeedValue>,
1780 #[rasn(identifier = "platoonMinSpeedLimit")]
1781 pub platoon_min_speed_limit: Option<SpeedValue>,
1782 #[rasn(identifier = "platoonSpeedRecommendation")]
1783 pub platoon_speed_recommendation: Option<SpeedValue>,
1784 #[rasn(identifier = "roadSignCodes")]
1785 pub road_sign_codes: Option<RoadSignCodes>,
1786 #[rasn(identifier = "extraText")]
1787 pub extra_text: Option<ConstraintTextLines2>,
1788 }
1789 impl PlatooningRule {
1790 pub fn new(
1791 priority: PriorityLevel,
1792 allowed_sae_automation_levels: SaeAutomationLevels,
1793 max_no_of_vehicles: Option<MaxNoOfVehicles>,
1794 max_lenght_of_platoon: Option<MaxLenghtOfPlatoon>,
1795 min_gap_between_vehicles: Option<GapBetweenVehicles>,
1796 platoon_max_speed_limit: Option<SpeedValue>,
1797 platoon_min_speed_limit: Option<SpeedValue>,
1798 platoon_speed_recommendation: Option<SpeedValue>,
1799 road_sign_codes: Option<RoadSignCodes>,
1800 extra_text: Option<ConstraintTextLines2>,
1801 ) -> Self {
1802 Self {
1803 priority,
1804 allowed_sae_automation_levels,
1805 max_no_of_vehicles,
1806 max_lenght_of_platoon,
1807 min_gap_between_vehicles,
1808 platoon_max_speed_limit,
1809 platoon_min_speed_limit,
1810 platoon_speed_recommendation,
1811 road_sign_codes,
1812 extra_text,
1813 }
1814 }
1815 }
1816 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1817 #[rasn(delegate, size("1..=5"))]
1818 pub struct PlatooningRules(pub SequenceOf<PlatooningRule>);
1819 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1820 #[rasn(choice, automatic_tags)]
1821 #[non_exhaustive]
1822 pub enum PolygonalLine {
1823 deltaPositions(DeltaPositions),
1824 deltaPositionsWithAltitude(DeltaReferencePositions),
1825 absolutePositions(AbsolutePositions),
1826 absolutePositionsWithAltitude(AbsolutePositionsWAltitude),
1827 }
1828 #[doc = " new DE in V2"]
1829 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1830 #[rasn(delegate, value("0..=2"))]
1831 pub struct PriorityLevel(pub u8);
1832 #[doc = " new DE in V2"]
1833 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1834 #[rasn(delegate, value("0..=15"))]
1835 pub struct RSCUnit(pub u8);
1836 #[doc = " Inner type "]
1837 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1838 #[rasn(choice, automatic_tags)]
1839 #[non_exhaustive]
1840 pub enum RSCodeCode {
1841 viennaConvention(VcCode),
1842 iso14823(ISO14823Code),
1843 #[rasn(value("0..=65535"))]
1844 itisCodes(u16),
1845 anyCatalogue(AnyCatalogue),
1846 }
1847 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1848 #[rasn(automatic_tags)]
1849 pub struct RSCode {
1850 #[rasn(value("1..=4", extensible), identifier = "layoutComponentId")]
1851 pub layout_component_id: Option<Integer>,
1852 pub code: RSCodeCode,
1853 }
1854 impl RSCode {
1855 pub fn new(layout_component_id: Option<Integer>, code: RSCodeCode) -> Self {
1856 Self {
1857 layout_component_id,
1858 code,
1859 }
1860 }
1861 }
1862 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1863 #[rasn(automatic_tags)]
1864 #[non_exhaustive]
1865 pub struct RccPart {
1866 #[rasn(identifier = "relevanceZoneIds")]
1867 pub relevance_zone_ids: ZoneIds,
1868 #[rasn(identifier = "roadType")]
1869 pub road_type: RoadType,
1870 #[rasn(identifier = "laneConfiguration")]
1871 pub lane_configuration: LaneConfiguration,
1872 }
1873 impl RccPart {
1874 pub fn new(
1875 relevance_zone_ids: ZoneIds,
1876 road_type: RoadType,
1877 lane_configuration: LaneConfiguration,
1878 ) -> Self {
1879 Self {
1880 relevance_zone_ids,
1881 road_type,
1882 lane_configuration,
1883 }
1884 }
1885 }
1886 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1887 #[rasn(delegate, size("1..=16", extensible))]
1888 pub struct RoadConfigurationContainer(pub SequenceOf<RccPart>);
1889 #[doc = " new DF in V2"]
1890 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1891 #[rasn(delegate, size("1..=4", extensible))]
1892 pub struct RoadSignCodes(pub SequenceOf<RSCode>);
1893 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1894 #[rasn(delegate, size("1..=16", extensible))]
1895 pub struct RoadSurfaceContainer(pub SequenceOf<RscPart>);
1896 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1897 #[rasn(automatic_tags)]
1898 pub struct RoadSurfaceDynamicCharacteristics {
1899 pub condition: Condition,
1900 pub temperature: Temperature,
1901 #[rasn(identifier = "iceOrWaterDepth")]
1902 pub ice_or_water_depth: Depth,
1903 pub treatment: TreatmentType,
1904 }
1905 impl RoadSurfaceDynamicCharacteristics {
1906 pub fn new(
1907 condition: Condition,
1908 temperature: Temperature,
1909 ice_or_water_depth: Depth,
1910 treatment: TreatmentType,
1911 ) -> Self {
1912 Self {
1913 condition,
1914 temperature,
1915 ice_or_water_depth,
1916 treatment,
1917 }
1918 }
1919 }
1920 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1921 #[rasn(automatic_tags)]
1922 pub struct RoadSurfaceStaticCharacteristics {
1923 #[rasn(identifier = "frictionCoefficient")]
1924 pub friction_coefficient: FrictionCoefficient,
1925 pub material: MaterialType,
1926 pub wear: WearLevel,
1927 #[rasn(identifier = "avBankingAngle")]
1928 pub av_banking_angle: BankingAngle,
1929 }
1930 impl RoadSurfaceStaticCharacteristics {
1931 pub fn new(
1932 friction_coefficient: FrictionCoefficient,
1933 material: MaterialType,
1934 wear: WearLevel,
1935 av_banking_angle: BankingAngle,
1936 ) -> Self {
1937 Self {
1938 friction_coefficient,
1939 material,
1940 wear,
1941 av_banking_angle,
1942 }
1943 }
1944 }
1945 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1946 #[rasn(automatic_tags)]
1947 pub struct RscPart {
1948 #[rasn(identifier = "detectionZoneIds")]
1949 pub detection_zone_ids: Option<ZoneIds>,
1950 #[rasn(identifier = "relevanceZoneIds")]
1951 pub relevance_zone_ids: ZoneIds,
1952 pub direction: Option<Direction>,
1953 #[rasn(identifier = "roadSurfaceStaticCharacteristics")]
1954 pub road_surface_static_characteristics: Option<RoadSurfaceStaticCharacteristics>,
1955 #[rasn(identifier = "roadSurfaceDynamicCharacteristics")]
1956 pub road_surface_dynamic_characteristics: Option<RoadSurfaceDynamicCharacteristics>,
1957 }
1958 impl RscPart {
1959 pub fn new(
1960 detection_zone_ids: Option<ZoneIds>,
1961 relevance_zone_ids: ZoneIds,
1962 direction: Option<Direction>,
1963 road_surface_static_characteristics: Option<RoadSurfaceStaticCharacteristics>,
1964 road_surface_dynamic_characteristics: Option<RoadSurfaceDynamicCharacteristics>,
1965 ) -> Self {
1966 Self {
1967 detection_zone_ids,
1968 relevance_zone_ids,
1969 direction,
1970 road_surface_static_characteristics,
1971 road_surface_dynamic_characteristics,
1972 }
1973 }
1974 }
1975 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1976 #[rasn(delegate, value("0..=5"))]
1977 pub struct SaeAutomationLevel(pub u8);
1978 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1979 #[rasn(delegate, size("1..=5"))]
1980 pub struct SaeAutomationLevels(pub SequenceOf<SaeAutomationLevel>);
1981 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1982 #[rasn(automatic_tags)]
1983 pub struct Segment {
1984 pub line: PolygonalLine,
1985 #[rasn(identifier = "laneWidth")]
1986 pub lane_width: Option<LaneWidth>,
1987 }
1988 impl Segment {
1989 pub fn new(line: PolygonalLine, lane_width: Option<LaneWidth>) -> Self {
1990 Self { line, lane_width }
1991 }
1992 }
1993 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1994 #[rasn(automatic_tags)]
1995 #[non_exhaustive]
1996 pub struct SegmentExtended {
1997 #[rasn(identifier = "segmentReferencePosition")]
1998 pub segment_reference_position: Option<Zid>,
1999 pub line: PolygonalLine,
2000 #[rasn(identifier = "segmentWidthLeft")]
2001 pub segment_width_left: Option<StandardLength9b>,
2002 #[rasn(identifier = "segmentWidthRight")]
2003 pub segment_width_right: Option<StandardLength9b>,
2004 }
2005 impl SegmentExtended {
2006 pub fn new(
2007 segment_reference_position: Option<Zid>,
2008 line: PolygonalLine,
2009 segment_width_left: Option<StandardLength9b>,
2010 segment_width_right: Option<StandardLength9b>,
2011 ) -> Self {
2012 Self {
2013 segment_reference_position,
2014 line,
2015 segment_width_left,
2016 segment_width_right,
2017 }
2018 }
2019 }
2020 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
2021 #[rasn(automatic_tags)]
2022 pub struct SupportItem {
2023 pub id: ContentId,
2024 pub content: Any,
2025 }
2026 impl SupportItem {
2027 pub fn new(id: ContentId, content: Any) -> Self {
2028 Self { id, content }
2029 }
2030 }
2031 #[doc = " new DF in V2"]
2032 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
2033 #[rasn(delegate, size("1..=128", extensible))]
2034 pub struct SupportItems(pub SequenceOf<SupportItem>);
2035 #[doc = " Inner type "]
2036 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
2037 #[rasn(automatic_tags)]
2038 pub struct TcPartExtGroupIviType {
2039 #[rasn(identifier = "iviType")]
2040 pub ivi_type: IviType,
2041 #[rasn(identifier = "laneStatus")]
2042 pub lane_status: Option<LaneStatus>,
2043 #[rasn(identifier = "vehicleCharacteristics")]
2044 pub vehicle_characteristics: Option<VehicleCharacteristicsList>,
2045 }
2046 impl TcPartExtGroupIviType {
2047 pub fn new(
2048 ivi_type: IviType,
2049 lane_status: Option<LaneStatus>,
2050 vehicle_characteristics: Option<VehicleCharacteristicsList>,
2051 ) -> Self {
2052 Self {
2053 ivi_type,
2054 lane_status,
2055 vehicle_characteristics,
2056 }
2057 }
2058 }
2059 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
2060 #[rasn(automatic_tags)]
2061 #[non_exhaustive]
2062 pub struct TcPart {
2063 #[rasn(identifier = "detectionZoneIds")]
2064 pub detection_zone_ids: Option<ZoneIds>,
2065 #[rasn(identifier = "relevanceZoneIds")]
2066 pub relevance_zone_ids: ZoneIds,
2067 pub direction: Option<Direction>,
2068 #[rasn(identifier = "driverAwarenessZoneIds")]
2069 pub driver_awareness_zone_ids: Option<ZoneIds>,
2070 #[rasn(value("0..=255"), identifier = "minimumAwarenessTime")]
2071 pub minimum_awareness_time: Option<u8>,
2072 #[rasn(identifier = "applicableLanes")]
2073 pub applicable_lanes: Option<LanePositions>,
2074 #[rasn(value("1..=4", extensible), identifier = "layoutId")]
2075 pub layout_id: Option<Integer>,
2076 #[rasn(value("1..=64", extensible), identifier = "preStoredlayoutId")]
2077 pub pre_storedlayout_id: Option<Integer>,
2078 pub text: Option<TextLines>,
2079 pub data: OctetString,
2080 #[rasn(extension_addition_group, identifier = "SEQUENCE")]
2081 pub ext_group_ivi_type: Option<TcPartExtGroupIviType>,
2082 }
2083 impl TcPart {
2084 pub fn new(
2085 detection_zone_ids: Option<ZoneIds>,
2086 relevance_zone_ids: ZoneIds,
2087 direction: Option<Direction>,
2088 driver_awareness_zone_ids: Option<ZoneIds>,
2089 minimum_awareness_time: Option<u8>,
2090 applicable_lanes: Option<LanePositions>,
2091 layout_id: Option<Integer>,
2092 pre_storedlayout_id: Option<Integer>,
2093 text: Option<TextLines>,
2094 data: OctetString,
2095 ext_group_ivi_type: Option<TcPartExtGroupIviType>,
2096 ) -> Self {
2097 Self {
2098 detection_zone_ids,
2099 relevance_zone_ids,
2100 direction,
2101 driver_awareness_zone_ids,
2102 minimum_awareness_time,
2103 applicable_lanes,
2104 layout_id,
2105 pre_storedlayout_id,
2106 text,
2107 data,
2108 ext_group_ivi_type,
2109 }
2110 }
2111 }
2112 #[doc = " new DE in V2"]
2113 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
2114 #[rasn(delegate, value("-100..=151"))]
2115 pub struct Temperature(pub i16);
2116 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
2117 #[rasn(automatic_tags)]
2118 pub struct Text {
2119 #[rasn(value("1..=4", extensible), identifier = "layoutComponentId")]
2120 pub layout_component_id: Option<Integer>,
2121 #[rasn(size("10"))]
2122 pub language: BitString,
2123 #[rasn(identifier = "textContent")]
2124 pub text_content: Utf8String,
2125 }
2126 impl Text {
2127 pub fn new(
2128 layout_component_id: Option<Integer>,
2129 language: BitString,
2130 text_content: Utf8String,
2131 ) -> Self {
2132 Self {
2133 layout_component_id,
2134 language,
2135 text_content,
2136 }
2137 }
2138 }
2139 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
2140 #[rasn(delegate, size("1..=16", extensible))]
2141 pub struct TextContainer(pub SequenceOf<TcPart>);
2142 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
2143 #[rasn(delegate, size("1..=4", extensible))]
2144 pub struct TextLines(pub SequenceOf<Text>);
2145 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
2146 #[rasn(automatic_tags)]
2147 pub struct TractorCharacteristics {
2148 #[rasn(identifier = "equalTo")]
2149 pub equal_to: Option<VehicleCharacteristicsFixValuesList>,
2150 #[rasn(identifier = "notEqualTo")]
2151 pub not_equal_to: Option<VehicleCharacteristicsFixValuesList>,
2152 pub ranges: Option<VehicleCharacteristicsRangesList>,
2153 }
2154 impl TractorCharacteristics {
2155 pub fn new(
2156 equal_to: Option<VehicleCharacteristicsFixValuesList>,
2157 not_equal_to: Option<VehicleCharacteristicsFixValuesList>,
2158 ranges: Option<VehicleCharacteristicsRangesList>,
2159 ) -> Self {
2160 Self {
2161 equal_to,
2162 not_equal_to,
2163 ranges,
2164 }
2165 }
2166 }
2167 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
2168 #[rasn(automatic_tags)]
2169 pub struct TrailerCharacteristics {
2170 #[rasn(identifier = "equalTo")]
2171 pub equal_to: Option<TrailerCharacteristicsFixValuesList>,
2172 #[rasn(identifier = "notEqualTo")]
2173 pub not_equal_to: Option<TrailerCharacteristicsFixValuesList>,
2174 pub ranges: Option<TrailerCharacteristicsRangesList>,
2175 }
2176 impl TrailerCharacteristics {
2177 pub fn new(
2178 equal_to: Option<TrailerCharacteristicsFixValuesList>,
2179 not_equal_to: Option<TrailerCharacteristicsFixValuesList>,
2180 ranges: Option<TrailerCharacteristicsRangesList>,
2181 ) -> Self {
2182 Self {
2183 equal_to,
2184 not_equal_to,
2185 ranges,
2186 }
2187 }
2188 }
2189 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
2190 #[rasn(delegate, size("1..=4", extensible))]
2191 pub struct TrailerCharacteristicsFixValuesList(pub SequenceOf<VehicleCharacteristicsFixValues>);
2192 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
2193 #[rasn(delegate, size("1..=3"))]
2194 pub struct TrailerCharacteristicsList(pub SequenceOf<TrailerCharacteristics>);
2195 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
2196 #[rasn(delegate, size("1..=4", extensible))]
2197 pub struct TrailerCharacteristicsRangesList(pub SequenceOf<VehicleCharacteristicsRanges>);
2198 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
2199 #[rasn(delegate)]
2200 pub struct TrainCharacteristics(pub TractorCharacteristics);
2201 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
2202 #[rasn(delegate, value("0..=7"))]
2203 pub struct TreatmentType(pub u8);
2204 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
2205 #[rasn(delegate, size("1..=8", extensible))]
2206 pub struct ValidityPeriods(pub SequenceOf<InternationalSignApplicablePeriod>);
2207 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
2208 #[rasn(delegate, value("0..=7"))]
2209 pub struct VcClass(pub u8);
2210 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
2211 #[rasn(automatic_tags)]
2212 pub struct VcCode {
2213 #[rasn(identifier = "roadSignClass")]
2214 pub road_sign_class: VcClass,
2215 #[rasn(value("1..=64"), identifier = "roadSignCode")]
2216 pub road_sign_code: u8,
2217 #[rasn(identifier = "vcOption")]
2218 pub vc_option: VcOption,
2219 pub validity: Option<ValidityPeriods>,
2220 #[rasn(value("0..=65535"))]
2221 pub value: Option<u16>,
2222 pub unit: Option<RSCUnit>,
2223 }
2224 impl VcCode {
2225 pub fn new(
2226 road_sign_class: VcClass,
2227 road_sign_code: u8,
2228 vc_option: VcOption,
2229 validity: Option<ValidityPeriods>,
2230 value: Option<u16>,
2231 unit: Option<RSCUnit>,
2232 ) -> Self {
2233 Self {
2234 road_sign_class,
2235 road_sign_code,
2236 vc_option,
2237 validity,
2238 value,
2239 unit,
2240 }
2241 }
2242 }
2243 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
2244 #[rasn(delegate, value("0..=7"))]
2245 pub struct VcOption(pub u8);
2246 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
2247 #[rasn(choice, automatic_tags)]
2248 #[non_exhaustive]
2249 pub enum VehicleCharacteristicsFixValues {
2250 simpleVehicleType(StationType),
2251 euVehicleCategoryCode(EuVehicleCategoryCode),
2252 iso3833VehicleType(Iso3833VehicleType),
2253 euroAndCo2value(EnvironmentalCharacteristics),
2254 engineCharacteristics(EngineCharacteristics),
2255 loadType(LoadType),
2256 usage(VehicleRole),
2257 }
2258 #[doc = " new DF in V3.1"]
2259 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
2260 #[rasn(delegate, size("1..=4", extensible))]
2261 pub struct VehicleCharacteristicsFixValuesList(pub SequenceOf<VehicleCharacteristicsFixValues>);
2262 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
2263 #[rasn(delegate, size("1..=8", extensible))]
2264 pub struct VehicleCharacteristicsList(pub SequenceOf<CompleteVehicleCharacteristics>);
2265 #[doc = " Inner type "]
2266 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
2267 #[rasn(choice, automatic_tags)]
2268 #[non_exhaustive]
2269 pub enum VehicleCharacteristicsRangesLimits {
2270 #[rasn(value("0..=7"))]
2271 numberOfAxles(u8),
2272 vehicleDimensions(VehicleDimensions),
2273 vehicleWeightLimits(VehicleWeightLimits),
2274 axleWeightLimits(AxleWeightLimits),
2275 passengerCapacity(PassengerCapacity),
2276 exhaustEmissionValues(ExhaustEmissionValues),
2277 dieselEmissionValues(DieselEmissionValues),
2278 soundLevel(SoundLevel),
2279 }
2280 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
2281 #[rasn(automatic_tags)]
2282 pub struct VehicleCharacteristicsRanges {
2283 #[rasn(identifier = "comparisonOperator")]
2284 pub comparison_operator: ComparisonOperator,
2285 pub limits: VehicleCharacteristicsRangesLimits,
2286 }
2287 impl VehicleCharacteristicsRanges {
2288 pub fn new(
2289 comparison_operator: ComparisonOperator,
2290 limits: VehicleCharacteristicsRangesLimits,
2291 ) -> Self {
2292 Self {
2293 comparison_operator,
2294 limits,
2295 }
2296 }
2297 }
2298 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
2299 #[rasn(delegate, size("1..=4", extensible))]
2300 pub struct VehicleCharacteristicsRangesList(pub SequenceOf<VehicleCharacteristicsRanges>);
2301 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
2302 #[rasn(delegate, value("0..=7", extensible))]
2303 pub struct WearLevel(pub Integer);
2304 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
2305 #[rasn(delegate, value("1..=32", extensible))]
2306 pub struct Zid(pub Integer);
2307 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
2308 #[rasn(choice, automatic_tags)]
2309 #[non_exhaustive]
2310 pub enum Zone {
2311 #[rasn(identifier = "segment-carriagewayOrLane")]
2312 segment_carriagewayOrLane(Segment),
2313 area(PolygonalLine),
2314 computedSegment(ComputedSegment),
2315 #[rasn(extension_addition, identifier = "segment-setOfLanes")]
2316 segment_setOfLanes(SegmentExtended),
2317 }
2318 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
2319 #[rasn(delegate, size("1..=8", extensible))]
2320 pub struct ZoneIds(pub SequenceOf<Zid>);
2321}
2322#[allow(
2323 non_camel_case_types,
2324 non_snake_case,
2325 non_upper_case_globals,
2326 unused,
2327 clippy::too_many_arguments
2328)]
2329pub mod ivi_is {
2330 extern crate alloc;
2331 use core::borrow::Borrow;
2332
2333 use rasn::prelude::*;
2334
2335 use super::ivi::*;
2336 pub static DUMMY_ID: ContentId = ContentId(Integer::ZERO);
2337 pub static TEST1: ContentId = ContentId(Integer::ONE);
2338}
2339#[allow(
2340 non_camel_case_types,
2341 non_snake_case,
2342 non_upper_case_globals,
2343 unused,
2344 clippy::too_many_arguments
2345)]
2346pub mod ivim_pdu_descriptions {
2347 extern crate alloc;
2348 use core::borrow::Borrow;
2349
2350 use rasn::prelude::*;
2351
2352 use super::super::cdd_2_2_1::etsi_its_cdd::ItsPduHeader;
2353 use super::ivi::IviStructure;
2354
2355 #[doc = "In vehicle information Message Message"]
2356 #[doc = "This DF includes DEs for the IVIM protocolVersion, the IVI message type identifier `messageID`,"]
2357 #[doc = "the station identifier `stationID` of the originating ITS-S and the IVI data from ISO TS 19321."]
2358 #[doc = "\n@field header: The DE `protocolVersion` is used to select the appropriate protocol decoder at the receiving ITS-S. "]
2359 #[doc = " It shall be set to 2."]
2360 #[doc = " The DE `messageID` shall be ivim(6)."]
2361 #[doc = "\n@field ivi: contains the IVI data as defined in ISO TS 19321."]
2362 #[doc = "\n@category: Basic Information"]
2363 #[doc = "\n@revision: V1.3.1"]
2364 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
2365 #[rasn(automatic_tags)]
2366 pub struct IVIM {
2367 pub header: ItsPduHeader,
2368 pub ivi: IviStructure,
2369 }
2370 impl IVIM {
2371 pub fn new(header: ItsPduHeader, ivi: IviStructure) -> Self {
2372 Self { header, ivi }
2373 }
2374 }
2375}