1use thiserror::Error;
4
5#[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#[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#[derive(Error, Debug)]
69pub enum TextFsmError {
70 #[error(transparent)]
71 Template(#[from] TemplateError),
72
73 #[error(transparent)]
74 Parse(#[from] ParseError),
75
76 #[error(transparent)]
77 CliTable(#[from] crate::clitable::CliTableError),
78
79 #[error("I/O error: {0}")]
80 Io(#[from] std::io::Error),
81}