Parser for Telegram's TL (Type Language) schema files.
Reads .tl schema files and produces a structured AST. Used by ferogram-tl-gen as a build-dependency most users don't need to depend on this crate directly.
[dependencies]
ferogram-tl-parser = "0.3.0"pub struct Definition {
pub name: String,
pub id: Option<u32>, // CRC32, may be omitted
pub params: Vec<Parameter>,
pub ty: Type,
pub category: Category, // Type or Function
}
pub enum ParameterType {
Flags,
Normal { ty: Type, flag: Option<Flag> },
Repeated { params: Vec<Parameter> },
}
pub enum Category { Type, Function }use ferogram_tl_parser::{parse_tl_file, TlIterator, tl::Category};
// Collect all definitions
let schema = std::fs::read_to_string("api.tl").unwrap();
let definitions = parse_tl_file(&schema).unwrap();
// Streaming iterator (lower memory)
for def in TlIterator::new(&schema) {
match def.category {
Category::Type => { /* constructor */ }
Category::Function => { /* RPC function */ }
}
}Parse errors return ParseError with the failing line. Malformed tokens stop the iterator rather than silently skipping.
ferogram-tl-types
└ ferogram-tl-gen
└ ferogram-tl-parser <-- here
MIT or Apache-2.0, at your option. See LICENSE-MIT and LICENSE-APACHE.
Ankit Chaubey - github.com/ankit-chaubey