Skip to main content

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#"
14//! Value Name (\S+)
15//! Value Age (\d+)
16//!
17//! Start
18//!   ^Name: ${Name}, Age: ${Age} -> Record
19//! "#;
20//!
21//! let template = Template::parse_str(template_str).unwrap();
22//! let mut parser = template.parser();
23//!
24//! let input = "Name: Alice, Age: 30\nName: Bob, Age: 25\n";
25//! let results = parser.parse_text(input).unwrap();
26//!
27//! assert_eq!(results.len(), 2);
28//! ```
29//!
30//! ## Features
31//!
32//! - **`serde`** - Enable serde deserialization support. Allows using
33//!   [`Parser::parse_text_into`] to deserialize parsed results directly into
34//!   typed Rust structs.
35
36pub mod clitable;
37
38#[cfg(feature = "serde")]
39pub mod de;
40
41mod error;
42mod parser;
43mod template;
44mod types;
45
46#[cfg(feature = "serde")]
47pub use de::{
48    from_record, from_record_borrowed, from_value, DeserializeError, RecordDeserializer,
49    ValueDeserializer,
50};
51
52pub use clitable::{CliTable, CliTableError, Index, IndexEntry, Row, TextTable};
53pub use error::{ParseError, TemplateError, TextFsmError};
54pub use parser::{Parser, ValueState};
55pub use template::{Rule, State, Template, ValueDef};
56pub use types::{LineOp, ListItem, RecordOp, Transition, Value, ValueOption, ValueOptions};
57
58/// Result type alias using TextFsmError.
59pub type Result<T> = std::result::Result<T, TextFsmError>;