flow_graph/
network.rs

1use crate::Schematic;
2
3#[derive(Debug)]
4pub struct Network<DATA> {
5  pub name: String,
6  schematics: Vec<Schematic<DATA>>,
7  data: DATA,
8}
9
10impl<DATA> Network<DATA>
11where
12  DATA: Clone,
13{
14  pub fn new<T: Into<String>>(name: T, data: DATA) -> Self {
15    Self {
16      name: name.into(),
17      schematics: Default::default(),
18      data,
19    }
20  }
21
22  pub fn add_schematic(&mut self, schematic: Schematic<DATA>) {
23    self.schematics.push(schematic);
24  }
25
26  #[must_use]
27  pub fn schematic(&self, name: &str) -> Option<&Schematic<DATA>> {
28    self.schematics.iter().find(|s| s.name() == name)
29  }
30
31  #[must_use]
32  pub fn schematics(&self) -> &[Schematic<DATA>] {
33    &self.schematics
34  }
35
36  pub const fn data(&self) -> &DATA {
37    &self.data
38  }
39}
40
41#[cfg(test)]
42mod test {
43  use anyhow::Result;
44
45  use super::*;
46
47  const fn sync_send<T>()
48  where
49    T: Sync + Send,
50  {
51  }
52
53  #[test]
54  const fn test_sync_send() -> Result<()> {
55    sync_send::<Network<Option<()>>>();
56    Ok(())
57  }
58}