A parser for VDF
  • Rust 99.6%
  • Nix 0.4%
Find a file
2025-06-05 22:17:30 +02:00
.forgejo/workflows workflow updates 2025-06-02 19:53:42 +02:00
examples add support for deserializing a map with int keys as a sequence 2025-06-05 22:17:30 +02:00
src add support for deserializing a map with int keys as a sequence 2025-06-05 22:17:30 +02:00
tests add support for deserializing a map with int keys as a sequence 2025-06-05 22:17:30 +02:00
.envrc init 2023-12-15 15:51:53 +01:00
.gitignore statements 2023-12-15 16:26:16 +01:00
Cargo.lock 0.3.0 2025-03-01 16:32:27 +01:00
Cargo.toml update repo url 2025-06-02 19:55:09 +02:00
flake.lock update mill-scale 2025-06-02 20:07:49 +02:00
flake.nix update mill-scale 2025-06-02 20:07:49 +02:00
README.md fmt 2025-06-02 19:55:48 +02:00

vdf-reader

A parser for Valve's Data Format v1 (VDF) also known as KeyValues.

The parser focuses on being able to deal with all the various weird forms vdf takes in the wild and providing access to the data stream instead of always requiring parsing the file in full.

Serde

This crate implements a deserializer for serde, but because VDF doesn't map that well only the serde data model not every type might deserialize properly.

Limitations

  • Because the boolean values 0 and 1 can't be distinguished from numbers, it is not possible to use booleans in untagged enums.

  • When deserializing arrays by settings the same key multiple times, the keys have to be consecutive.

    key: 1
    key: 2
    other: 3
    

    will work, but

    key: 1
    other: 3
    key: 2
    

    will not.

Tagged enum root

To help deserialize some common vdf formats, you can use a tagged enum as the root element instead of a struct.

"Variant1" {
    content 1
}

or

"Variant2" {
    other foo
}

can be deserialized into a

enum Data {
    Variant1 {
        content: bool,
    },
    Variant2 {
        other: String,
    }
}