#gldf #json-format #lighting #product #writer #definition #luminaire

gldf-rs

为 Rust 开发的 GLDF (通用照明数据格式) 解析器和写入器,特别针对 Rust/WASM 目标,设计为 JSON 格式

4 个版本

0.2.2 2023年9月24日
0.2.1 2023年9月1日
0.2.0 2023年9月1日
0.1.0 2023年6月25日

解析器实现 中排名第 1388


4 个crate中使用

GPL-3.0-or-later

300KB
2K SLoC

包含 (Zip 文件,83KB) tests/data/rzb___311619_002_5_8630.gldf,(Zip 文件,26KB) tests/data/test/geo/recessed_round.l3d,(Zip 文件,33KB) tests/data/test.gldf,(Zip 文件,2KB) tests/data/R2MCOBSIK-30.gldf

Rust

gldf-rs

处理 GLDF

发布说明:0.2.2

  • 添加了对 meta-information.xml 的支持

0.2.1

  • 为主页添加了更好的文档
  • 为了支持 wasm,需要进行一些重构,以使用 reqwest::blocking

0.2.0

  • 重构 gldf.rs 为子模块
  • 添加了对 BOM 编码的 UTF8 product.xml 的支持
  • 添加了对 url 文件类型的支持
  • 添加了更好的文档

一个跨平台的 GLDF 处理库。

用于 GLDF 的新灯具/传感器容器定义。

基本上 .gldf 是一个 zip 容器,包含用于定义的 product.xml

以及所需的二进制文件,例如图像和一些 Eulumdat / 或 IES 文件,以及表征灯具的 3D 模型。

更多

https://gldf.io

这个 Rust 库现在可以直接从 .gldf 容器中读取 product.xml 定义,并能以 JSON 格式表示内容,这是将内容输入搜索引擎或以 JSON 存储的常用方式,尤其是 Postgres。

let loaded: GldfProduct = GldfProduct::load_gldf("./tests/data/test.gldf").unwrap();
println!("{:?}", loaded);
// Display pretty printed XML
let x_serialized = loaded.to_xml().unwrap();
println!("{}", x_serialized);
let json_str = loaded.to_json().unwrap();
println!("{}", json_str);
let j_loaded: GldfProduct = GldfProduct::from_json(&json_str).unwrap();
let x_reserialized =  j_loaded.to_xml().unwrap();
println!("{}", x_reserialized);
assert_eq!(x_serialized, x_reserialized);

通过 OK,所以我们能够读取 xml,转换为 JSON,然后再转换回相同的 xml。

目前已经有了一些实现

let phot_files = loaded.get_phot_files().unwrap();
let mut ldc_contents: Vec<String> = Vec::new();
for f in phot_files.iter(){
    let mut ldc_content = "".to_owned();
    let file_id = f.id.to_string();
    ldc_content.push_str(&loaded.get_ldc_by_id(file_id).unwrap().to_owned());
    ldc_contents.push(ldc_content);
    println!("{}", f.file_name)
}

Here it is shown how to read the ldc files from the GLDF Container.

依赖项

~8–24MB
~335K SLoC