snurr 0.8.2

Read BPMN 2.0 files and run the process flow
Documentation
pub type Result<T> = std::result::Result<T, Error>;

#[derive(thiserror::Error, Debug)]
pub enum Error {
    #[error("BPMN type {0} missing id")]
    MissingId(String),

    #[error("{0} with name or id '{1}' has no output. (Used correct name or id?)")]
    MissingOutput(String, String),

    #[error("{0} with name or id '{1}' has no default flow")]
    MissingDefault(String, String),

    #[error("could not find BPMN data with id {0}")]
    MisssingBpmnData(String),

    #[error("(sub)process missing start id {0}")]
    MissingProcessStart(String),

    #[error("could not find process data with id {0}")]
    MissingProcessData(String),

    #[error("missing definitions id")]
    MissingDefinitionsId,

    #[error("sequenceFlow missing targetRef")]
    MissingTargetRef,

    #[error("sequenceFlow missing sourceRef")]
    MissingSourceRef,

    #[error("type {0} not implemented")]
    TypeNotImplemented(String),

    #[error("could not find {0} boundary symbol attached to {1}")]
    MissingBoundary(String, String),

    #[error("missing intermediate throw event name on {0}")]
    MissingIntermediateThrowEventName(String),

    #[error("missing intermediate catch event symbol {0} with name {1}")]
    MissingIntermediateCatchEvent(String, String),

    #[error("couldn't extract process result")]
    NoProcessResult,

    #[error("{0} not supported")]
    NotSupported(String),

    #[error("{0}")]
    BpmnRequirement(String),

    #[error("{0}")]
    Builder(String),

    #[error(transparent)]
    File(#[from] quick_xml::Error),

    #[error(transparent)]
    Io(#[from] std::io::Error),

    #[error(transparent)]
    Utf8(#[from] std::str::Utf8Error),

    #[error(transparent)]
    Send(#[from] std::sync::mpsc::SendError<(&'static str, String)>),
}

// BpmnRequirement
pub const AT_LEAST_TWO_OUTGOING: &str =
    "Event gateway must have at least two outgoing sequence flows";

pub const TOO_MANY_END_SYMBOLS: &str = "Too many end with a symbol";

pub fn cannot_do_events(gateway: &crate::model::GatewayType) -> Error {
    Error::BpmnRequirement(format!("{gateway} cannot do decision based on events"))
}

pub fn cannot_fork(gateway: &crate::model::GatewayType) -> Error {
    Error::BpmnRequirement(format!("{gateway} cannot fork"))
}

pub fn cannot_use_default(gateway: &crate::model::GatewayType) -> Error {
    Error::BpmnRequirement(format!("{gateway} cannot use default"))
}

pub fn cannot_use_cond_expr(gateway: &crate::model::GatewayType) -> Error {
    Error::BpmnRequirement(format!("{gateway} cannot use conditional expression"))
}