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
36#[cfg(feature = "serde")]
37pub mod de;
38
39mod error;
40mod parser;
41mod template;
42mod types;
43
44#[cfg(feature = "serde")]
45pub use de::{
46    from_record, from_record_borrowed, from_value, DeserializeError, RecordDeserializer,
47    ValueDeserializer,
48};
49
50pub use error::{ParseError, TemplateError, TextFsmError};
51pub use parser::{Parser, ValueState};
52pub use template::{Rule, State, Template, ValueDef};
53pub use types::{LineOp, ListItem, RecordOp, Transition, Value, ValueOption, ValueOptions};
54
55/// Result type alias using TextFsmError.
56pub type Result<T> = std::result::Result<T, TextFsmError>;