maliput_sys/api/rules/
mod.rs1#[cxx::bridge(namespace = "maliput::api::rules")]
32#[allow(clippy::needless_lifetimes)] pub mod ffi {
34 struct ConstTrafficLightPtr {
37 pub traffic_light: *const TrafficLight,
38 }
39 struct ConstBulbGroupPtr {
42 pub bulb_group: *const BulbGroup,
43 }
44 struct ConstBulbPtr {
47 pub bulb: *const Bulb,
48 }
49 struct ConstBulbStateRef<'a> {
52 pub bulb_state: &'a BulbState,
53 }
54 struct FloatWrapper {
57 pub value: f64,
58 }
59 struct RelatedRule {
64 pub group_name: String,
65 pub rule_ids: Vec<String>,
66 }
67 struct RelatedUniqueId {
72 pub group_name: String,
73 pub unique_ids: Vec<String>,
74 }
75 struct DiscreteValueRuleType {
80 pub type_id: String,
81 pub values: UniquePtr<CxxVector<DiscreteValueRuleDiscreteValue>>,
82 }
83 struct DiscreteValueRuleState {
88 pub rule_id: String,
89 pub state: UniquePtr<DiscreteValueRuleDiscreteValue>,
90 }
91 struct RangeValueRuleType {
96 pub type_id: String,
97 pub values: UniquePtr<CxxVector<RangeValueRuleRange>>,
98 }
99
100 struct ConstLaneSRangeRef<'a> {
105 pub lane_s_range: &'a LaneSRange,
106 }
107
108 struct NextPhase {
114 pub phase_id: String,
115 pub duration_until: UniquePtr<FloatWrapper>,
116 }
117
118 #[repr(i32)]
119 enum BulbColor {
120 kRed = 0,
121 kYellow,
122 kGreen,
123 }
124
125 #[repr(i32)]
126 enum BulbType {
127 kRound = 0,
128 kArrow,
129 }
130
131 #[repr(i32)]
132 enum BulbState {
133 kOff = 0,
134 kOn,
135 kBlinking,
136 }
137
138 unsafe extern "C++" {
139 include!("api/rules/rules.h");
140 include!("api/rules/aliases.h");
141 include!("cxx_utils/error_handling.h");
142
143 #[namespace = "maliput::api"]
145 type InertialPosition = crate::api::ffi::InertialPosition;
146 #[namespace = "maliput::api"]
147 type Rotation = crate::api::ffi::Rotation;
148 #[namespace = "maliput::api"]
149 type LaneSRange = crate::api::ffi::LaneSRange;
150 #[namespace = "maliput::api"]
151 type LaneSRoute = crate::api::ffi::LaneSRoute;
152 #[namespace = "maliput::math"]
153 type Vector3 = crate::math::ffi::Vector3;
154
155 type TrafficLightBook;
157 fn TrafficLightBook_TrafficLights(book: &TrafficLightBook) -> UniquePtr<CxxVector<ConstTrafficLightPtr>>;
158 fn TrafficLightBook_GetTrafficLight(book: &TrafficLightBook, id: &String) -> *const TrafficLight;
159
160 type TrafficLight;
162 fn TrafficLight_id(traffic_light: &TrafficLight) -> String;
163 fn TrafficLight_position_road_network(traffic_light: &TrafficLight) -> UniquePtr<InertialPosition>;
164 fn TrafficLight_orientation_road_network(traffic_light: &TrafficLight) -> UniquePtr<Rotation>;
165 fn TrafficLight_bulb_groups(traffic_light: &TrafficLight) -> UniquePtr<CxxVector<ConstBulbGroupPtr>>;
166 fn TrafficLight_GetBulbGroup(traffic_light: &TrafficLight, id: &String) -> *const BulbGroup;
167
168 type BulbColor;
169 type BulbState;
170 type BulbType;
171 type Bulb;
173 fn Bulb_id(bulb: &Bulb) -> String;
174 fn Bulb_unique_id(bulb: &Bulb) -> UniquePtr<UniqueBulbId>;
175 fn Bulb_position_bulb_group(bulb: &Bulb) -> UniquePtr<InertialPosition>;
176 fn Bulb_orientation_bulb_group(bulb: &Bulb) -> UniquePtr<Rotation>;
177 fn color(self: &Bulb) -> &BulbColor;
178 fn Bulb_type(bulb: &Bulb) -> &BulbType;
180 fn Bulb_arrow_orientation_rad(bulb: &Bulb) -> UniquePtr<FloatWrapper>;
181 fn Bulb_states(bulb: &Bulb) -> UniquePtr<CxxVector<BulbState>>;
182 fn GetDefaultState(self: &Bulb) -> BulbState;
183 fn IsValidState(self: &Bulb, state: &BulbState) -> bool;
184 fn Bulb_bounding_box_min(bulb: &Bulb) -> UniquePtr<Vector3>;
185 fn Bulb_bounding_box_max(bulb: &Bulb) -> UniquePtr<Vector3>;
186 fn Bulb_bulb_group(bulb: &Bulb) -> *const BulbGroup;
187
188 type BulbGroup;
190 fn BulbGroup_id(bulb_group: &BulbGroup) -> String;
191 fn BulbGroup_unique_id(bulb: &BulbGroup) -> UniquePtr<UniqueBulbGroupId>;
192 fn BulbGroup_position_traffic_light(bulb_group: &BulbGroup) -> UniquePtr<InertialPosition>;
193 fn BulbGroup_orientation_traffic_light(bulb_group: &BulbGroup) -> UniquePtr<Rotation>;
194 fn BulbGroup_bulbs(bulb_group: &BulbGroup) -> UniquePtr<CxxVector<ConstBulbPtr>>;
195 fn BulbGroup_GetBulb(bulb_group: &BulbGroup, id: &String) -> *const Bulb;
196 fn BulbGroup_traffic_light(bulb_group: &BulbGroup) -> *const TrafficLight;
197
198 type UniqueBulbId;
200 fn string(self: &UniqueBulbId) -> &CxxString;
201 fn UniqueBulbId_traffic_light_id(id: &UniqueBulbId) -> String;
202 fn UniqueBulbId_bulb_group_id(id: &UniqueBulbId) -> String;
203 fn UniqueBulbId_bulb_id(id: &UniqueBulbId) -> String;
204
205 type UniqueBulbGroupId;
207 fn string(self: &UniqueBulbGroupId) -> &CxxString;
208 fn UniqueBulbGroupId_traffic_light_id(id: &UniqueBulbGroupId) -> String;
209 fn UniqueBulbGroupId_bulb_group_id(id: &UniqueBulbGroupId) -> String;
210
211 type QueryResults;
213 fn QueryResults_discrete_value_rules(query_results: &QueryResults) -> Vec<String>;
214 fn QueryResults_range_value_rules(query_results: &QueryResults) -> Vec<String>;
215
216 type RoadRulebook;
218 fn RoadRulebook_GetDiscreteValueRule(book: &RoadRulebook, rule_id: &String) -> UniquePtr<DiscreteValueRule>;
219 fn RoadRulebook_GetRangeValueRule(book: &RoadRulebook, rule_id: &String) -> UniquePtr<RangeValueRule>;
220 fn RoadRulebook_Rules(book: &RoadRulebook) -> UniquePtr<QueryResults>;
221 #[allow(clippy::needless_lifetimes)]
222 fn RoadRulebook_FindRules(
223 book: &RoadRulebook,
224 ranges: &Vec<ConstLaneSRangeRef>,
225 tolerance: f64,
226 ) -> Result<UniquePtr<QueryResults>>;
227
228 type DiscreteValueRuleDiscreteValue;
230 fn DiscreteValueRuleDiscreteValue_value(value: &DiscreteValueRuleDiscreteValue) -> String;
231 fn DiscreteValueRuleDiscreteValue_severity(value: &DiscreteValueRuleDiscreteValue) -> i32;
232 fn DiscreteValueRuleDiscreteValue_related_rules(
233 value: &DiscreteValueRuleDiscreteValue,
234 ) -> UniquePtr<CxxVector<RelatedRule>>;
235 fn DiscreteValueRuleDiscreteValue_related_unique_ids(
236 value: &DiscreteValueRuleDiscreteValue,
237 ) -> UniquePtr<CxxVector<RelatedUniqueId>>;
238
239 type DiscreteValueRule;
241 fn states(self: &DiscreteValueRule) -> &CxxVector<DiscreteValueRuleDiscreteValue>;
242 fn DiscreteValueRule_id(rule: &DiscreteValueRule) -> String;
243 fn DiscreteValueRule_type_id(rule: &DiscreteValueRule) -> String;
244 fn DiscreteValueRule_zone(rule: &DiscreteValueRule) -> UniquePtr<LaneSRoute>;
245
246 type RangeValueRuleRange;
248 fn RangeValueRuleRange_description(range: &RangeValueRuleRange) -> String;
249 fn RangeValueRuleRange_min(range: &RangeValueRuleRange) -> f64;
250 fn RangeValueRuleRange_max(range: &RangeValueRuleRange) -> f64;
251 fn RangeValueRuleRange_severity(range: &RangeValueRuleRange) -> i32;
252 fn RangeValueRuleRange_related_rules(range: &RangeValueRuleRange) -> UniquePtr<CxxVector<RelatedRule>>;
253 fn RangeValueRuleRange_related_unique_ids(range: &RangeValueRuleRange)
254 -> UniquePtr<CxxVector<RelatedUniqueId>>;
255 type RangeValueRule;
257 fn RangeValueRule_id(rule: &RangeValueRule) -> String;
258 fn RangeValueRule_type_id(rule: &RangeValueRule) -> String;
259 fn RangeValueRule_zone(rule: &RangeValueRule) -> UniquePtr<LaneSRoute>;
260 fn states(self: &RangeValueRule) -> &CxxVector<RangeValueRuleRange>;
261
262 type Phase;
264 fn Phase_id(phase: &Phase) -> String;
265 fn Phase_discrete_value_rule_states(phase: &Phase) -> UniquePtr<CxxVector<DiscreteValueRuleState>>;
266 fn Phase_unique_bulb_ids(phase: &Phase) -> UniquePtr<CxxVector<UniqueBulbId>>;
267 fn Phase_bulb_state(phase: &Phase, bulb_id: &UniqueBulbId) -> UniquePtr<BulbState>;
268 fn ptr_from_unique_bulb_id(id: &UniqueBulbId) -> UniquePtr<UniqueBulbId>;
270
271 type PhaseRing;
273 fn PhaseRing_id(phase_ring: &PhaseRing) -> String;
274 fn PhaseRing_GetPhase(phase_ring: &PhaseRing, id: &String) -> UniquePtr<Phase>;
275 fn PhaseRing_phases_ids(phase_ring: &PhaseRing) -> Vec<String>;
276 fn PhaseRing_GetNextPhases(phase_ring: &PhaseRing, id: &String) -> Result<UniquePtr<CxxVector<NextPhase>>>;
277
278 type PhaseRingBook;
280 fn PhaseRingBook_GetPhaseRingsId(book: &PhaseRingBook) -> Vec<String>;
281 fn PhaseRingBook_GetPhaseRing(book: &PhaseRingBook, id: &String) -> UniquePtr<PhaseRing>;
282 fn PhaseRingBook_FindPhaseRing(book: &PhaseRingBook, rule_id: &String) -> UniquePtr<PhaseRing>;
283
284 type RuleRegistry;
286 fn RuleRegistry_DiscreteValueRuleTypes(registry: &RuleRegistry) -> UniquePtr<CxxVector<DiscreteValueRuleType>>;
287 fn RuleRegistry_RangeValueRuleTypes(registry: &RuleRegistry) -> UniquePtr<CxxVector<RangeValueRuleType>>;
288 }
289}