spqr-tree 5.1.0

A representation of the SPQR tree in Rust with support for I/O
Documentation
use crate::{
    decomposition::builder::AddEdgeError, io::plain_spqr_file::line_reader::LineReaderError,
};

#[derive(thiserror::Error, Debug)]
pub enum ReadError {
    #[error("I/O error: {0}")]
    Io(#[from] std::io::Error),

    #[error("Line reader error: {0}")]
    Line(#[from] LineReaderError),

    #[error("Add edge error: {0}")]
    AddEdge(#[from] AddEdgeError),

    #[error("invalid line type: {0:?}. Expected one of G, N, B, C, S, P, R, V, E")]
    InvalidLineType(String),

    #[error("the file does not start with a header line")]
    MissingHeader,

    #[error("the file fromat version is unsupported. Supported is version v0.4")]
    UnsupportedVersion,

    #[error("the header does not contain a URL pointing to the specification")]
    MissingHeaderUrl,

    #[error("a G-line is missing the component name")]
    MissingComponentNameInGLine,

    #[error("an empty component was declared")]
    EmptyComponent,

    #[error("an N-line is missing the node name")]
    MissingNodeNameInNLine,

    #[error("unknown node name: {0:?}")]
    UnknownNodeName(String),

    #[error("a B-line is missing the block name")]
    MissingBlockNameInBLine,

    #[error("a B-line is missing the component name")]
    MissingComponentNameInBLine,

    #[error("unknown component name: {0:?}")]
    UnknownComponentName(String),

    #[error("an empty block was declared")]
    EmptyBlock,

    #[error("a C-line is missing the node name")]
    MissingNodeNameInCLine,

    #[error("unknown block name: {0:?}")]
    UnknownBlockName(String),

    #[error("a cut node with no incident blocks was declared")]
    EmptyCutNode,

    #[error("a S/P/R-node is missing its name")]
    MissingSPQRNodeNameInSPRLine,

    #[error("a S/P/R-node is missing its block name")]
    MissingBlockNameInSPRLine,

    #[error("a S/P/R-node has less than two nodes")]
    LessThanTwoNodesInSPQRNode,

    #[error("a V-line is missing the SPQR edge name")]
    MissingSPQREdgeNameInVLine,

    #[error("a V-line is missing an SPQR node name")]
    MissingSPQRNodeNameInVLine,

    #[error("a V-line is missing a node name")]
    MissingNodeNameInVLine,

    #[error("unknown SPQR node name: {0:?}")]
    UnknownSPQRNodeName(String),

    #[error("a SPQR edge connects SPQR nodes from different blocks: {0:?}")]
    SPQREdgeBetweenDifferentBlocks(String),

    #[error("an E-line is missing the edge name")]
    MissingEdgeNameInELine,

    #[error("an E-line is missing the SPQR node or block or component name")]
    MissingSPQRNodeOrBlockOrComponentNameInELine,

    #[error("an E-line is missing a node name")]
    MissingNodeNameInELine,

    #[error("unknown SPQR node or block or component name: {0:?}")]
    UnknownSPQRNodeOrBlockOrComponentName(String),

    #[error("an E-line is declared between {0:?} and {1:?}, but no such edge exists in the graph")]
    NoEdgeBetweenNodes(String, String),
}