flow-graph 0.23.0

A representation of a graph data structure for flow-based programming.
Documentation
use crate::Schematic;

#[derive(Debug)]
pub struct Network<DATA> {
  pub name: String,
  schematics: Vec<Schematic<DATA>>,
  data: DATA,
}

impl<DATA> Network<DATA>
where
  DATA: Clone,
{
  pub fn new<T: Into<String>>(name: T, data: DATA) -> Self {
    Self {
      name: name.into(),
      schematics: Default::default(),
      data,
    }
  }

  pub fn add_schematic(&mut self, schematic: Schematic<DATA>) {
    self.schematics.push(schematic);
  }

  #[must_use]
  pub fn schematic(&self, name: &str) -> Option<&Schematic<DATA>> {
    self.schematics.iter().find(|s| s.name() == name)
  }

  #[must_use]
  pub fn schematics(&self) -> &[Schematic<DATA>] {
    &self.schematics
  }

  pub const fn data(&self) -> &DATA {
    &self.data
  }
}

#[cfg(test)]
mod test {
  use anyhow::Result;

  use super::*;

  const fn sync_send<T>()
  where
    T: Sync + Send,
  {
  }

  #[test]
  const fn test_sync_send() -> Result<()> {
    sync_send::<Network<Option<()>>>();
    Ok(())
  }
}