jellyflow-core 0.2.0

Headless graph model, IDs, type descriptors, and interaction policy primitives for Jellyflow.
Documentation
use crate::core::{BindingId, EdgeId, GroupId, NodeId, PortId, StickyNoteId};

#[derive(Debug, Clone, thiserror::Error, PartialEq, Eq)]
pub enum GraphMutationError {
    #[error("node already exists: {0:?}")]
    NodeAlreadyExists(NodeId),
    #[error("missing node: {0:?}")]
    MissingNode(NodeId),
    #[error("port already exists: {0:?}")]
    PortAlreadyExists(PortId),
    #[error("missing port: {0:?}")]
    MissingPort(PortId),
    #[error("edge already exists: {0:?}")]
    EdgeAlreadyExists(EdgeId),
    #[error("missing edge: {0:?}")]
    MissingEdge(EdgeId),
    #[error("missing group: {0:?}")]
    MissingGroup(GroupId),
    #[error("binding already exists: {0:?}")]
    BindingAlreadyExists(BindingId),
    #[error("missing binding: {0:?}")]
    MissingBinding(BindingId),
    #[error("missing sticky note: {0:?}")]
    MissingStickyNote(StickyNoteId),
    #[error("port owner mismatch: port={port:?} expected={expected:?} got={got:?}")]
    PortOwnerMismatch {
        port: PortId,
        expected: NodeId,
        got: NodeId,
    },
    #[error("duplicate port in node planning: node={node:?} port={port:?}")]
    DuplicateNodePort { node: NodeId, port: PortId },
    #[error("port insert index out of bounds: node={node:?} index={index} len={len}")]
    PortInsertOutOfBounds {
        node: NodeId,
        index: usize,
        len: usize,
    },
}