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
76 struct ConstLaneSRangeRef<'a> {
81 pub lane_s_range: &'a LaneSRange,
82 }
83
84 #[repr(i32)]
85 enum BulbColor {
86 kRed = 0,
87 kYellow,
88 kGreen,
89 }
90
91 #[repr(i32)]
92 enum BulbType {
93 kRound = 0,
94 kArrow,
95 }
96
97 #[repr(i32)]
98 enum BulbState {
99 kOff = 0,
100 kOn,
101 kBlinking,
102 }
103
104 unsafe extern "C++" {
105 include!("api/rules/rules.h");
106 include!("api/rules/aliases.h");
107 include!("cxx_utils/error_handling.h");
108
109 #[namespace = "maliput::api"]
111 type InertialPosition = crate::api::ffi::InertialPosition;
112 #[namespace = "maliput::api"]
113 type Rotation = crate::api::ffi::Rotation;
114 #[namespace = "maliput::api"]
115 type LaneSRange = crate::api::ffi::LaneSRange;
116 #[namespace = "maliput::api"]
117 type LaneSRoute = crate::api::ffi::LaneSRoute;
118 #[namespace = "maliput::math"]
119 type Vector3 = crate::math::ffi::Vector3;
120
121 type TrafficLightBook;
123 fn TrafficLightBook_TrafficLights(book: &TrafficLightBook) -> UniquePtr<CxxVector<ConstTrafficLightPtr>>;
124 fn TrafficLightBook_GetTrafficLight(book: &TrafficLightBook, id: &String) -> *const TrafficLight;
125
126 type TrafficLight;
128 fn TrafficLight_id(traffic_light: &TrafficLight) -> String;
129 fn TrafficLight_position_road_network(traffic_light: &TrafficLight) -> UniquePtr<InertialPosition>;
130 fn TrafficLight_orientation_road_network(traffic_light: &TrafficLight) -> UniquePtr<Rotation>;
131 fn TrafficLight_bulb_groups(traffic_light: &TrafficLight) -> UniquePtr<CxxVector<ConstBulbGroupPtr>>;
132 fn TrafficLight_GetBulbGroup(traffic_light: &TrafficLight, id: &String) -> *const BulbGroup;
133
134 type BulbColor;
135 type BulbState;
136 type BulbType;
137 type Bulb;
139 fn Bulb_id(bulb: &Bulb) -> String;
140 fn Bulb_unique_id(bulb: &Bulb) -> UniquePtr<UniqueBulbId>;
141 fn Bulb_position_bulb_group(bulb: &Bulb) -> UniquePtr<InertialPosition>;
142 fn Bulb_orientation_bulb_group(bulb: &Bulb) -> UniquePtr<Rotation>;
143 fn color(self: &Bulb) -> &BulbColor;
144 fn Bulb_type(bulb: &Bulb) -> &BulbType;
146 fn Bulb_arrow_orientation_rad(bulb: &Bulb) -> UniquePtr<FloatWrapper>;
147 fn Bulb_states(bulb: &Bulb) -> UniquePtr<CxxVector<BulbState>>;
148 fn GetDefaultState(self: &Bulb) -> BulbState;
149 fn IsValidState(self: &Bulb, state: &BulbState) -> bool;
150 fn Bulb_bounding_box_min(bulb: &Bulb) -> UniquePtr<Vector3>;
151 fn Bulb_bounding_box_max(bulb: &Bulb) -> UniquePtr<Vector3>;
152 fn Bulb_bulb_group(bulb: &Bulb) -> *const BulbGroup;
153
154 type BulbGroup;
156 fn BulbGroup_id(bulb_group: &BulbGroup) -> String;
157 fn BulbGroup_unique_id(bulb: &BulbGroup) -> UniquePtr<UniqueBulbGroupId>;
158 fn BulbGroup_position_traffic_light(bulb_group: &BulbGroup) -> UniquePtr<InertialPosition>;
159 fn BulbGroup_orientation_traffic_light(bulb_group: &BulbGroup) -> UniquePtr<Rotation>;
160 fn BulbGroup_bulbs(bulb_group: &BulbGroup) -> UniquePtr<CxxVector<ConstBulbPtr>>;
161 fn BulbGroup_GetBulb(bulb_group: &BulbGroup, id: &String) -> *const Bulb;
162 fn BulbGroup_traffic_light(bulb_group: &BulbGroup) -> *const TrafficLight;
163
164 type UniqueBulbId;
166 fn string(self: &UniqueBulbId) -> &CxxString;
167 fn UniqueBulbId_traffic_light_id(id: &UniqueBulbId) -> String;
168 fn UniqueBulbId_bulb_group_id(id: &UniqueBulbId) -> String;
169 fn UniqueBulbId_bulb_id(id: &UniqueBulbId) -> String;
170
171 type UniqueBulbGroupId;
173 fn string(self: &UniqueBulbGroupId) -> &CxxString;
174 fn UniqueBulbGroupId_traffic_light_id(id: &UniqueBulbGroupId) -> String;
175 fn UniqueBulbGroupId_bulb_group_id(id: &UniqueBulbGroupId) -> String;
176
177 type QueryResults;
179 fn QueryResults_discrete_value_rules(query_results: &QueryResults) -> Vec<String>;
180 fn QueryResults_range_value_rules(query_results: &QueryResults) -> Vec<String>;
181
182 type RoadRulebook;
184 fn RoadRulebook_GetDiscreteValueRule(
185 book: &RoadRulebook,
186 rule_id: &String,
187 ) -> Result<UniquePtr<DiscreteValueRule>>;
188 fn RoadRulebook_GetRangeValueRule(book: &RoadRulebook, rule_id: &String) -> Result<UniquePtr<RangeValueRule>>;
189 fn RoadRulebook_Rules(book: &RoadRulebook) -> UniquePtr<QueryResults>;
190 #[allow(clippy::needless_lifetimes)]
191 fn RoadRulebook_FindRules(
192 book: &RoadRulebook,
193 ranges: &Vec<ConstLaneSRangeRef>,
194 tolerance: f64,
195 ) -> Result<UniquePtr<QueryResults>>;
196
197 type DiscreteValueRuleDiscreteValue;
199 fn DiscreteValueRuleDiscreteValue_value(value: &DiscreteValueRuleDiscreteValue) -> String;
200 fn DiscreteValueRuleDiscreteValue_severity(value: &DiscreteValueRuleDiscreteValue) -> i32;
201 fn DiscreteValueRuleDiscreteValue_related_rules(
202 value: &DiscreteValueRuleDiscreteValue,
203 ) -> UniquePtr<CxxVector<RelatedRule>>;
204 fn DiscreteValueRuleDiscreteValue_related_unique_ids(
205 value: &DiscreteValueRuleDiscreteValue,
206 ) -> UniquePtr<CxxVector<RelatedUniqueId>>;
207
208 type DiscreteValueRule;
210 fn states(self: &DiscreteValueRule) -> &CxxVector<DiscreteValueRuleDiscreteValue>;
211 fn DiscreteValueRule_id(rule: &DiscreteValueRule) -> String;
212 fn DiscreteValueRule_type_id(rule: &DiscreteValueRule) -> String;
213 fn DiscreteValueRule_zone(rule: &DiscreteValueRule) -> UniquePtr<LaneSRoute>;
214
215 type RangeValueRuleRange;
217 fn RangeValueRuleRange_description(range: &RangeValueRuleRange) -> String;
218 fn RangeValueRuleRange_min(range: &RangeValueRuleRange) -> f64;
219 fn RangeValueRuleRange_max(range: &RangeValueRuleRange) -> f64;
220 fn RangeValueRuleRange_severity(range: &RangeValueRuleRange) -> i32;
221 fn RangeValueRuleRange_related_rules(range: &RangeValueRuleRange) -> UniquePtr<CxxVector<RelatedRule>>;
222 fn RangeValueRuleRange_related_unique_ids(range: &RangeValueRuleRange)
223 -> UniquePtr<CxxVector<RelatedUniqueId>>;
224 type RangeValueRule;
226 fn RangeValueRule_id(rule: &RangeValueRule) -> String;
227 fn RangeValueRule_type_id(rule: &RangeValueRule) -> String;
228 fn RangeValueRule_zone(rule: &RangeValueRule) -> UniquePtr<LaneSRoute>;
229 fn states(self: &RangeValueRule) -> &CxxVector<RangeValueRuleRange>;
230 }
231}