1use geop_core_math::{
7 geop_error::{GeopError, GeopResult},
8 primitives::Datum,
9 scalars::Scalar,
10};
11
12use super::Part;
13use super::ids::DatumId;
14
15impl<S: Scalar> Part<S> {
16 pub fn add_datum(&mut self, datum: Datum<S>, name: impl Into<String>) -> GeopResult<DatumId> {
19 let id = DatumId(self.fresh_id());
20 self.names.insert(id, name)?;
21 self.datums.insert(id, datum);
22 Ok(id)
23 }
24
25 pub fn datum(&self, id: DatumId) -> GeopResult<&Datum<S>> {
26 self.datums
27 .get(&id)
28 .ok_or_else(|| GeopError::new(format!("Part has no datum {id}")))
29 }
30
31 pub fn datums(&self) -> impl Iterator<Item = (DatumId, &Datum<S>)> {
33 self.datums.iter().map(|(&id, d)| (id, d))
34 }
35}