textfsm_core/lib.rs
1//! # TextFSM Core
2//!
3//! Core parsing library for TextFSM template-based state machine.
4//!
5//! This crate provides the core parsing functionality. For the user-facing API
6//! with compile-time template validation macros, use the `textfsm-rust` crate.
7//!
8//! ## Quick Start
9//!
10//! ```rust
11//! use textfsm_core::Template;
12//!
13//! let template_str = r#"Value Name (\S+)
14//! Value Age (\d+)
15//!
16//! Start
17//! ^Name: ${Name}, Age: ${Age} -> Record
18//! "#;
19//!
20//! let template = Template::parse_str(template_str).unwrap();
21//! let mut parser = template.parser();
22//!
23//! let input = "Name: Alice, Age: 30\nName: Bob, Age: 25\n";
24//! let results = parser.parse_text(input).unwrap();
25//!
26//! assert_eq!(results.len(), 2);
27//! ```
28//!
29//! ## Features
30//!
31//! - **`serde`** - Enable serde deserialization support. Allows using
32//! [`Parser::parse_text_into`] to deserialize parsed results directly into
33//! typed Rust structs.
34
35pub mod clitable;
36
37#[cfg(feature = "serde")]
38pub mod de;
39
40mod error;
41mod parser;
42mod template;
43mod types;
44
45#[cfg(feature = "serde")]
46pub use de::{
47 from_record, from_record_borrowed, from_value, DeserializeError, RecordDeserializer,
48 ValueDeserializer,
49};
50
51pub use clitable::{CliTable, CliTableError, Index, IndexEntry, Row, TextTable};
52pub use error::{ParseError, TemplateError, TextFsmError};
53pub use parser::{Parser, ValueState};
54pub use template::{Rule, State, Template, ValueDef};
55pub use types::{LineOp, ListItem, RecordOp, Transition, Value, ValueOption, ValueOptions};
56
57/// Result type alias using TextFsmError.
58pub type Result<T> = std::result::Result<T, TextFsmError>;