jellyflow-core 0.2.0

Headless graph model, IDs, type descriptors, and interaction policy primitives for Jellyflow.
Documentation
use crate::ops::GraphOp;

pub(super) fn invert_binding_op(op: &GraphOp) -> Vec<GraphOp> {
    match op {
        GraphOp::AddBinding { id, binding } => vec![GraphOp::RemoveBinding {
            id: *id,
            binding: binding.clone(),
        }],
        GraphOp::RemoveBinding { id, binding } => vec![GraphOp::AddBinding {
            id: *id,
            binding: binding.clone(),
        }],
        GraphOp::SetBindingSubject { id, from, to } => vec![GraphOp::SetBindingSubject {
            id: *id,
            from: to.clone(),
            to: from.clone(),
        }],
        GraphOp::SetBindingTarget { id, from, to } => vec![GraphOp::SetBindingTarget {
            id: *id,
            from: to.clone(),
            to: from.clone(),
        }],
        GraphOp::SetBindingKind { id, from, to } => vec![GraphOp::SetBindingKind {
            id: *id,
            from: to.clone(),
            to: from.clone(),
        }],
        GraphOp::SetBindingMeta { id, from, to } => vec![GraphOp::SetBindingMeta {
            id: *id,
            from: to.clone(),
            to: from.clone(),
        }],
        _ => unreachable!("binding invert handler received non-binding operation"),
    }
}