Skip to main content

textfsm_core/
error.rs

1//! Error types for TextFSM template parsing and text parsing.
2
3use thiserror::Error;
4
5/// Errors that occur when parsing a template file.
6#[derive(Error, Debug, Clone, PartialEq)]
7pub enum TemplateError {
8    #[error("no Value definitions found in template")]
9    NoValues,
10
11    #[error("duplicate Value name '{0}'")]
12    DuplicateValue(String),
13
14    #[error("invalid Value definition at line {line}: {message}")]
15    InvalidValue { line: usize, message: String },
16
17    #[error("invalid regex '{pattern}': {message}")]
18    InvalidRegex { pattern: String, message: String },
19
20    #[error("missing required 'Start' state")]
21    MissingStartState,
22
23    #[error("duplicate state name '{0}'")]
24    DuplicateState(String),
25
26    #[error("invalid state name '{name}': {reason}")]
27    InvalidStateName { name: String, reason: String },
28
29    #[error("state '{0}' referenced but not defined")]
30    UndefinedState(String),
31
32    #[error("non-empty 'End' state (must be empty)")]
33    NonEmptyEndState,
34
35    #[error("non-empty 'EOF' state (must be empty)")]
36    NonEmptyEofState,
37
38    #[error("invalid rule at line {line}: {message}")]
39    InvalidRule { line: usize, message: String },
40
41    #[error("'Continue' action cannot have state transition at line {0}")]
42    ContinueWithTransition(usize),
43
44    #[error("unknown option '{0}'")]
45    UnknownOption(String),
46
47    #[error("duplicate option '{0}'")]
48    DuplicateOption(String),
49
50    #[error("expected blank line after Value definitions at line {0}")]
51    ExpectedBlankLine(usize),
52
53    #[error("invalid variable substitution at line {line}: {message}")]
54    InvalidSubstitution { line: usize, message: String },
55}
56
57/// Errors that occur during text parsing (runtime).
58#[derive(Error, Debug, Clone, PartialEq)]
59pub enum ParseError {
60    #[error("error triggered by rule at line {rule_line}: {message}")]
61    RuleError { rule_line: usize, message: String },
62
63    #[error("deserialization error: {0}")]
64    DeserializeError(String),
65}
66
67/// Combined error type for public API.
68#[derive(Error, Debug)]
69pub enum TextFsmError {
70    #[error(transparent)]
71    Template(#[from] TemplateError),
72
73    #[error(transparent)]
74    Parse(#[from] ParseError),
75
76    #[error("I/O error: {0}")]
77    Io(#[from] std::io::Error),
78}