#序列化 #pkl #apple #性能 #解析器 #格式 #声明

bin+lib pkl_fast

一个旨在轻松高效地处理苹果公司PKL格式的库

2 个版本

0.1.1 2024年2月11日
0.1.0 2024年2月11日

#1155解析实现

MIT 许可证

9KB
246

pkl_fast

最快的 pkl 解析 crate!

特性

  • 将 Pkl 字符串解析为 Rust 中的结构化表示(哈希表)
  • 将 Pkl 字符串解析为抽象语法树(AST)
  • 支持字符串、整数(十进制、八进制、十六进制、二进制)、浮点数、布尔值和多行字符串
  • 支持嵌套对象、修改声明、修改表达式和链式修改声明
  • 支持经典标识符、$identifiers、_identifiers 和非法标识符
  • 支持类实例
  • 支持持续时间和大小时

安装

在您的 rust 项目中,只需运行:cargo add new-pkl(目前使用 new-pkl crate,pkl_fast 的新稳定版本即将推出)

使用方法

以下是一个如何解析 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 许可证。有关详细信息,请参阅许可证文件

依赖项

~1.5MB