textfsm-core 0.3.1

Core parsing library for TextFSM template-based state machine
Documentation
//! Error types for TextFSM template parsing and text parsing.

use thiserror::Error;

/// Errors that occur when parsing a template file.
#[derive(Error, Debug, Clone, PartialEq)]
pub enum TemplateError {
    #[error("no Value definitions found in template")]
    NoValues,

    #[error("duplicate Value name '{0}'")]
    DuplicateValue(String),

    #[error("invalid Value definition at line {line}: {message}")]
    InvalidValue { line: usize, message: String },

    #[error("invalid regex '{pattern}': {message}")]
    InvalidRegex { pattern: String, message: String },

    #[error("missing required 'Start' state")]
    MissingStartState,

    #[error("duplicate state name '{0}'")]
    DuplicateState(String),

    #[error("invalid state name '{name}': {reason}")]
    InvalidStateName { name: String, reason: String },

    #[error("state '{0}' referenced but not defined")]
    UndefinedState(String),

    #[error("non-empty 'End' state (must be empty)")]
    NonEmptyEndState,

    #[error("non-empty 'EOF' state (must be empty)")]
    NonEmptyEofState,

    #[error("invalid rule at line {line}: {message}")]
    InvalidRule { line: usize, message: String },

    #[error("'Continue' action cannot have state transition at line {0}")]
    ContinueWithTransition(usize),

    #[error("unknown option '{0}'")]
    UnknownOption(String),

    #[error("duplicate option '{0}'")]
    DuplicateOption(String),

    #[error("expected blank line after Value definitions at line {0}")]
    ExpectedBlankLine(usize),

    #[error("invalid variable substitution at line {line}: {message}")]
    InvalidSubstitution { line: usize, message: String },
}

/// Errors that occur during text parsing (runtime).
#[derive(Error, Debug, Clone, PartialEq)]
pub enum ParseError {
    #[error("error triggered by rule at line {rule_line}: {message}")]
    RuleError { rule_line: usize, message: String },

    #[error("deserialization error: {0}")]
    DeserializeError(String),
}

/// Combined error type for public API.
#[derive(Error, Debug)]
pub enum TextFsmError {
    #[error(transparent)]
    Template(#[from] TemplateError),

    #[error(transparent)]
    Parse(#[from] ParseError),

    #[error(transparent)]
    CliTable(#[from] crate::clitable::CliTableError),

    #[error("I/O error: {0}")]
    Io(#[from] std::io::Error),
}