jellyflow-core 0.2.0

Headless graph model, IDs, type descriptors, and interaction policy primitives for Jellyflow.
Documentation
use super::super::GraphDiffPlanner;
use crate::core::{GraphId, GraphImport};
use crate::ops::GraphOp;

impl<'a> GraphDiffPlanner<'a> {
    pub(crate) fn diff_imports(&mut self) {
        let from = self.from;
        let to = self.to;

        for (id, import_to) in &to.imports {
            if let Some(import_from) = from.imports.get(id) {
                self.diff_existing_import(*id, import_from, import_to);
            } else {
                self.push_op(GraphOp::AddImport {
                    id: *id,
                    import: import_to.clone(),
                });
            }
        }

        for (id, import_from) in &from.imports {
            if !to.imports.contains_key(id) {
                self.push_op(GraphOp::RemoveImport {
                    id: *id,
                    import: import_from.clone(),
                });
            }
        }
    }

    fn diff_existing_import(
        &mut self,
        id: GraphId,
        import_from: &GraphImport,
        import_to: &GraphImport,
    ) {
        if import_from.alias != import_to.alias {
            self.push_op(GraphOp::SetImportAlias {
                id,
                from: import_from.alias.clone(),
                to: import_to.alias.clone(),
            });
        }
    }
}