#文件格式 #valve #dmx #二进制格式 #序列化 #源引擎 #键值对

datamodel

一个用于序列化和反序列化Valve公司专有DMX文件格式的Rust库

6个版本 (3个破坏性版本)

0.5.3 2024年3月4日
0.5.1 2024年1月24日
0.4.0 2023年11月11日
0.3.0 2023年11月7日
0.1.0 2023年11月3日

#828解析器实现

Download history 20/week @ 2024-04-02

每月145 次下载

MIT 协议

62KB
1.5K SLoC

datamodel-rs

datamodel-rs是一个Rust库,提供序列化和反序列化Valve的专有DMX文件格式的功能。

什么是DMX?

DMX是由Valve公司创建的一种键值格式文件格式。它主要用于Source Filmmaker(SFM),但也可用于其他用途,如3D模型和粒子。DMX文件可以以文本或二进制格式保存。DMX与XML类似,因为它使用元素和属性来存储数据。

示例

struct CoolData {
    name: String,
    age: i32,
    is_cool: bool,
}
impl Element for CoolData {
    fn to_element(self) -> DmElement {
        let mut element = DmElement::new(self.name, "CoolData".to_string());
        element.set_attribute("age", self.age);
        element.set_attribute("is_cool", self.is_cool);
        element
    }
    fn from_element(value: &DmElement) -> Option<Self> {
        Some(Self {
            name: value.get_name().to_string(),
            age: *value.get_attribute::<i32>("age")?,
            is_cool: *value.get_attribute::<bool>("is_cool")?,
        })
    }
}

let header = DmHeader {
    encoding_name: "binary".to_string(),
    encoding_version: 2,
    format_name: "dmx".to_string(),
    format_version: 1,
};

let mut root = DmElement::empty();
root.set_name("Cool Data");
root.set_element(
    "The Data",
    CoolData {
        name: "bob".to_string(),
        age: 42,
        is_cool: true,
    },
);

let _ = serialize_file("TheCoolFile.dmx", &root, &header);

支持什么?

  • 二进制编码版本1 - 5支持

需要什么?

  • keyvalues2编码
  • keyvalues2_flat编码

依赖项

~1MB
~18K SLoC