#vdf #serialization #deserialize #format #data #file-format #io

better-vdf

使用 serde 的 VDF 序列化文件格式

1 个不稳定版本

0.1.0 2024年3月8日

#1204解析器实现

自定义许可

28KB
784

由于我在 crates.io 上尝试的 VDF 实现都无法满足我的目的,所以我编写了自己的。

考虑到 VDF 是一个非常不规范的文档数据格式,一些数据类型(如布尔值)的实现方式看起来与数据格式兼容,尽管它们可能与原始格式不完全兼容。例如,`Vec` 和 `bool`。

使用方法

use serde::{Deserialize, Serialize};
use std::collections::HashMap;

#[derive(Serialize, Deserialize, Debug)]
struct Test {
    test: TestData,
}

#[derive(Serialize, Deserialize, Debug)]
struct TestData {
    name: String,
    list: Vec<TestObj>,
    map: HashMap<u64, i64>,
}

#[derive(Serialize, Deserialize, Debug)]
struct TestObj {
    obj: String,
    id: usize,
    weight: f32,
}

fn main() {
    let vdf = r#"
     "test"
     {
     	"name"		"Better VDF"
     	"list"
     	{
     		"0"
     		{
     			"obj"		"main_obj"
     			"id"		"19231"
     			"weight"		"12.9"
     		}
     		"1"
     		{
     			"obj"		"secondary_obj"
     			"id"		"381928"
     			"weight"		"5.12"
     		}
     	}
     	"map"
     	{
     		"228980"		"12318293"
     		"278319"		"-12393180"
     	}
     }
     "#;

    // Deserializing
    let test: Test = better_vdf::from_str(vdf).unwrap();

    println!("{test:#?}");

    // Serializing
    let serial = better_vdf::to_string(&test).unwrap();

    println!("{serial}");
}

依赖关系

~0.4–1MB
~22K SLoC