Skip to content

Commit f60ae68

Browse files
committed
Implement more Object::from to re-organize the code
Signed-off-by: Tristram Gräbener <tristram+git@tristramg.eu>
1 parent 630b766 commit f60ae68

1 file changed

Lines changed: 33 additions & 22 deletions

File tree

src/lrs.rs

Lines changed: 33 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,25 @@ pub struct Node {
8080
pub properties: Properties,
8181
}
8282

83+
impl From<&lrs_generated::Point> for Point {
84+
fn from(fb_point: &lrs_generated::Point) -> Self {
85+
point! {
86+
x: fb_point.x(),
87+
y: fb_point.y(),
88+
}
89+
}
90+
}
91+
92+
impl From<lrs_generated::Node<'_>> for Node {
93+
fn from(fb_node: lrs_generated::Node) -> Self {
94+
Self {
95+
id: fb_node.id().to_owned(),
96+
geometry: fb_node.geometry().map(Point::from),
97+
properties: from_fb(fb_node.properties()),
98+
}
99+
}
100+
}
101+
83102
/// A segment is a topological element of the [`Lrs`] that represents a piece of the [`Curve`] of an [`Lrm`]
84103
///
85104
/// It has a start and end [`Node`].
@@ -94,6 +113,17 @@ pub struct Segment {
94113
pub end_node: NodeHandle,
95114
}
96115

116+
impl From<lrs_generated::Segment<'_>> for Segment {
117+
fn from(fb_segment: lrs_generated::Segment) -> Self {
118+
Self {
119+
id: fb_segment.id().to_owned(),
120+
properties: from_fb(fb_segment.properties()),
121+
start_node: NodeHandle(fb_segment.start_node_index() as usize),
122+
end_node: NodeHandle(fb_segment.end_node_index() as usize),
123+
}
124+
}
125+
}
126+
97127
/// The result of a projection onto an [`LrmScale`].
98128
pub struct LrmProjection {
99129
/// Contains `measure` ([`LrmScaleMeasure`]) and `lrm` ([`LrmHandle`]).
@@ -259,12 +289,7 @@ impl<CurveImpl: Curve> Lrs<CurveImpl> {
259289
.projected_anchors()
260290
.map(|anchors| {
261291
let projected_anchor = anchors.get(idx);
262-
let geometry = projected_anchor.geometry().map(|geom| {
263-
point! {
264-
x: geom.x(),
265-
y: geom.y(),
266-
}
267-
});
292+
let geometry = projected_anchor.geometry().map(Point::from);
268293
(projected_anchor.distance_along_curve(), geometry)
269294
})
270295
.unwrap_or_else(|| project(&anchor, curve));
@@ -304,25 +329,11 @@ impl<CurveImpl: Curve> Lrs<CurveImpl> {
304329
}
305330

306331
for raw_node in lrs.nodes().unwrap_or_default().iter() {
307-
result.nodes.push(Node {
308-
id: raw_node.id().to_owned(),
309-
geometry: raw_node.geometry().map(|geom| {
310-
point! {
311-
x: geom.x(),
312-
y: geom.y(),
313-
}
314-
}),
315-
properties: from_fb(raw_node.properties()),
316-
});
332+
result.nodes.push(Node::from(raw_node));
317333
}
318334

319335
for raw_segment in lrs.segments().unwrap_or_default().iter() {
320-
result.segments.push(Segment {
321-
id: raw_segment.id().to_owned(),
322-
properties: from_fb(raw_segment.properties()),
323-
start_node: NodeHandle(raw_segment.start_node_index() as usize),
324-
end_node: NodeHandle(raw_segment.end_node_index() as usize),
325-
})
336+
result.segments.push(Segment::from(raw_segment))
326337
}
327338
Ok(result)
328339
}

0 commit comments

Comments
 (0)