3个版本

0.1.2 2024年8月14日
0.1.1 2024年8月14日
0.1.0 2024年8月14日

#365编码

Download history 279/week @ 2024-08-11

279 每月下载量

自定义许可证

63KB
1K SLoC

VSF (多用途存储格式)

VSF是一个开放标准的数据存储和表示格式。为了效率、安全性和适应性而设计,VSF旨在提供一种完整和统一的解决方案,用于存储和管理任何类型的数据,从简单的值到复杂的结构,如图像或3D对象。

主要功能

  • 优化以提高效率和紧凑的尺寸
  • 内置安全和有效性
  • 透明数据交换
  • 统一的元数据框架
  • 在颜色和数据表示中的光谱精度
  • 真实性证明和信任链
  • 面向未来的设计,适用于技术进步

支持的数据类型

VSF支持一系列基本构造数据类型,包括无符号和有符号整数、浮点数、复数、布尔值、Unicode文本和数组。它还包括用于元数据(如标签、偏移量和版本)的VSF特定类型。

用法

以下是一个创建示例VSF结构的示例

use vsf::{VsfType, parse, EncodeNumber};

fn create_minimal_vsf() -> Result<Vec<u8>, std::io::Error> {
    let mut vsf = vec!["".as_bytes().to_owned()];

    // Header
    let mut header_index = 0;
    vsf[header_index].append(&mut b"<".to_vec());
    let header_length_index = vsf.len();
    let mut header_length = 42; // Placeholder
    vsf.push(VsfType::b(header_length).flatten()?);
    header_index = vsf.len();
    vsf.push(VsfType::z(1).flatten()?); // Version
    vsf[header_index].append(&mut VsfType::y(1).flatten()?); // Backward version
    vsf[header_index].append(&mut VsfType::c(1).flatten()?); // Label definition count
    vsf[header_index].append(&mut b"(".to_vec());
    vsf[header_index].append(&mut VsfType::d("example data".to_string()).flatten()?);
    let label_offset_index = vsf.len();
    let mut label_offset = 42; // Placeholder
    vsf.push(VsfType::o(label_offset).flatten()?);
    let label_size_index = vsf.len();
    let mut label_size = 42; // Placeholder
    vsf.push(VsfType::b(label_size).flatten()?);
    header_index = vsf.len();
    vsf.push(VsfType::c(2).flatten()?); // Number of elements in example data
    vsf[header_index].append(&mut b")".to_vec());
    vsf[header_index].append(&mut b">".to_vec());
    let header_end_index = vsf.len();

    // Label set
    header_index = vsf.len();
    vsf.push(b"[".to_vec());
    vsf[header_index].append(&mut b"(".to_vec());
    vsf[header_index].append(&mut VsfType::d("example value one".to_string()).flatten()?);
    vsf[header_index].append(&mut b":".to_vec());
    vsf[header_index].append(&mut VsfType::f5(3.14159).flatten()?);
    vsf[header_index].append(&mut b")".to_vec());

    vsf[header_index].append(&mut b"(".to_vec());
    vsf[header_index].append(&mut VsfType::d("example value two".to_string()).flatten()?);
    vsf[header_index].append(&mut b":".to_vec());
    vsf[header_index].append(&mut VsfType::s7(i128::MAX).flatten()?);
    vsf[header_index].append(&mut b")".to_vec());

    vsf[header_index].append(&mut b"]".to_vec());

    let mut prev_header_length = 0;
    let mut prev_label_offset = 0;
    let mut prev_label_size = 0;

    while header_length != prev_header_length
        || label_offset != prev_label_offset
        || label_size != prev_label_size
    {
        prev_header_length = header_length;
        prev_label_offset = label_offset;
        prev_label_size = label_size;

        header_length = 0;
        for i in 0..header_end_index {
            header_length += vsf[i].len();
        }
        vsf[header_length_index] = VsfType::b(header_length * 8).flatten()?;

        label_offset = header_length;
        vsf[label_offset_index] = VsfType::o(label_offset * 8).flatten()?;

        label_size = 0;
        for i in header_end_index..vsf.len() {
            label_size += vsf[i].len();
        }
        vsf[label_size_index] = VsfType::b(label_size * 8).flatten()?;
    }

    let vsf_vector: Vec<u8> = vsf.into_iter().flatten().collect();
    Ok(vsf_vector)
}

未来功能

我们正在积极开发VSF以处理更复杂的数据结构!在未来版本中,您将能够

  • 保存和加载具有所有光谱特性的图像
  • 处理美味的数据类型和结构
  • 实现更多更好的构造函数和析构函数

敬请期待更新!

许可证

VSF在自定义开源许可证下发布。您可以自由地用于、修改和分发VSF,包括商业用途。然而,销售VSF本身或直接派生的格式是不允许的。有关完整条款,请参阅存储库中的LICENSE文件。

贡献

我们欢迎贡献!如果您想为此项目做出贡献,请联系 [email protected]

有关VSF或TOKEN系统的更多信息,请访问 https://sunsarrow.com/vsf

依赖关系

~1MB
~28K SLoC