textfsm_core/template/
mod.rs1mod parse;
7mod value;
8mod rule;
9
10pub use value::ValueDef;
11pub use rule::{Rule, State};
12
13use std::collections::HashMap;
14use std::io::BufRead;
15
16use crate::error::TemplateError;
17use crate::parser::Parser;
18
19#[derive(Debug, Clone)]
21pub struct Template {
22 values: Vec<ValueDef>,
24
25 #[allow(dead_code)]
27 value_index: HashMap<String, usize>,
28
29 #[allow(dead_code)]
31 value_templates: HashMap<String, String>,
32
33 states: HashMap<String, State>,
35
36 state_order: Vec<String>,
38}
39
40impl Template {
41 pub fn parse<R: BufRead>(reader: R) -> Result<Self, TemplateError> {
43 parse::parse_template(reader)
44 }
45
46 pub fn parse_str(s: &str) -> Result<Self, TemplateError> {
48 Self::parse(s.as_bytes())
49 }
50
51 pub fn parser(&self) -> Parser<'_> {
53 Parser::new(self)
54 }
55
56 pub fn values(&self) -> &[ValueDef] {
58 &self.values
59 }
60
61 pub fn header(&self) -> Vec<&str> {
63 self.values.iter().map(|v| v.name.as_str()).collect()
64 }
65
66 pub fn get_state(&self, name: &str) -> Option<&State> {
68 self.states.get(name)
69 }
70
71 pub fn state_order(&self) -> &[String] {
73 &self.state_order
74 }
75
76 #[allow(dead_code)]
78 pub(crate) fn value_templates(&self) -> &HashMap<String, String> {
79 &self.value_templates
80 }
81
82 #[allow(dead_code)]
84 pub(crate) fn value_index(&self, name: &str) -> Option<usize> {
85 self.value_index.get(name).copied()
86 }
87}