macrograph 0.0.0

Flow based programming framework for Rust
Documentation
use std::sync::{Arc, Mutex};

use crate::{Engine, EngineRef, NodeSchema, NodeSchemaRef};

pub struct Package {
    pub name: String,
    pub(crate) schemas: Vec<NodeSchemaRef>,
    pub engine: Option<EngineRef>,
}

impl Package {
    pub fn new(name: &str) -> Self {
        Self {
            name: name.into(),
            schemas: vec![],
            engine: None,
        }
    }

    pub fn add_schema(&mut self, mut schema: NodeSchema) {
        match schema {
            NodeSchema::Event(ref mut schema) => schema.package = self.name.to_string(),
            NodeSchema::Exec(ref mut schema) => schema.package = self.name.to_string(),
        };

        self.schemas.push(Arc::new(schema));
    }

    pub fn set_engine(&mut self, engine: Engine) {
        self.engine = Some(Arc::new(Mutex::new(engine)));
    }

    pub fn schema(&self, name: &str) -> Option<&NodeSchemaRef> {
        self.schemas.iter().find(|s| s.get_id() == name)
    }
}