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}