2 个版本
0.1.1 | 2024年6月24日 |
---|---|
0.1.0 | 2024年6月24日 |
#62 在 解析工具
41KB
808 行
new-pkl
目前最快的 pkl 解析器包!
功能
- 将 Pkl 字符串解析为 Rust 中的结构化表示(哈希表)
- 将 Pkl 字符串解析为抽象语法树(AST)
- 支持字符串、整数(十进制、八进制、十六进制、二进制)、浮点数、布尔值和多行字符串
- 支持嵌套对象、修改声明、修改表达式和链式修改声明
- 支持经典标识符、$标识符、_标识符和不合法标识符
- 支持类实例
安装
在你的 Rust 项目中,只需运行: cargo add new-pkl
用法
以下是如何解析 PKL 字符串并从上下文中检索值的示例
use new_pkl::{Pkl, PklResult, PklValue};
fn main() -> PklResult<()> {
let source = r#"
bool_var = true
int_var = 42
float_var = 3.14
string_var = "hello"
object_var {
key1 = "value1"
key2 = 2
}
"#;
let mut pkl = Pkl::new();
pkl.parse(source)?;
println!("{:?}", pkl.get("int_var")); // Ok(PklValue::Int(100))
// Get values
println!("{:?}", pkl.get_bool("bool_var")); // Ok(true)
println!("{:?}", pkl.get_int("int_var")); // Ok(42)
println!("{:?}", pkl.get_float("float_var")); // Ok(3.14)
println!("{:?}", pkl.get_string("string_var")); // Ok("hello")
println!("{:?}", pkl.get_object("object_var")); // Ok(HashMap with key1 and key2)
// Modify values
pkl.set("int_var", PklValue::Int(100));
// Remove values
pkl.remove("float_var");
println!("{:?}", pkl.get_float("float_var")); // Err("Variable `float_var` not found")
// Or just generate an ast
let mut pkl = Pkl::new();
// the ast contains the start and end indexes of each value and statement
let ast = pkl.generate_ast(source)?;
Ok(())
}
许可证
本项目采用 MIT 许可证。有关详细信息,请参阅许可证文件。
依赖项
~2MB