6 个版本
0.3.6 | 2023 年 8 月 26 日 |
---|---|
0.3.5 | 2023 年 8 月 2 日 |
0.3.4 | 2023 年 7 月 27 日 |
0.2.2 | 2023 年 6 月 29 日 |
0.1.0 | 2022 年 6 月 11 日 |
#898 in 解析器实现
63 每月下载量
82KB
1.5K SLoC
serde-llsd
Linden Lab 序列化数据格式的序列化库。Rust/Serde 版本。
Linden Lab 结构化数据 (LLSD) 序列化
这是一个由 Second Life 和 Open Simulator 使用的序列化系统。在此处有文档: http://wiki.secondlife.com/wiki/LLSD
简介
有三种格式 - XML、二进制和“符号”。所有格式都存储相同的数据,大致相当于 JSON 可以表示的数据。提供了解析和输出函数。
状态
实现了 XML、二进制和符号版本。
单元测试通过。与 Second Life 资产服务器和 Open Simulator 服务器进行了测试。由 Sharpview 虚拟现实查看器使用。
数据类型
-
布尔值 - 转换为 Rust "bool"。
-
整数 - Rust i32。
-
实数 - Rust f64。
-
UUID - Rust [u8;16]。
-
字符串 - Rust String,Unicode。
-
日期 - “一个绝对的时间点,UTC,精确到秒”,作为 Rust i64。
-
URI - Rust String,是 URI。
-
二进制 - Vec。
-
映射是一个将 String 键映射到 LLSD 值的 HashMap。
-
数组是 LLSD 值的 Rust Vec。
字段访问
使用 enum_as_inner 包来为每个字段类型推导访问函数。所以,给定一个预期为整数的 LLSDValue llsdval,
let n = *llsdval.as_integer().unwrap();
将得到整数值。
Rust 中的 LLSD 值
这些通常遵循 Rust 包 "json" 的约定。一个 LLSD 值是一个树。
字符集
符号分为字节流形式和字符串形式。
字节流形式支持 LLSD 定义的 所有格式,包括字节计数的字符串和二进制值。只允许单字节 ASCII 字符。符号字节流形式不能放在 LLSD XML 中,因为字节流将不是有效的 UTF-8。
字符串形式是有效的 UTF-8,但不会接受字节计数的字符串或二进制值。二进制值必须以十六进制或 Base64 格式。字符串形式的符号可以放在 LLSD XML 中。
已知问题。
-
“符号”格式输入目前不能接受无穷大或 NaN 值。
-
错误信息没有指明输入流中问题的来源。
依赖项
~4.5MB
~86K SLoC