#序列化 #数据 #格式 #lab #structured #second #simulator

serde-llsd

用于在 Linden Lab 结构化数据格式中序列化和反序列化数据的库。此格式由 Second Life 和 Open Simulator 使用

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 解析器实现

Download history 167/week @ 2024-03-12 8/week @ 2024-04-02

63 每月下载量

LGPL-2.1 OR LGPL-3.0

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