#byte #hex #hash #serde #serde-json #serde-yaml

stdto_core

Stdto提供了一组用于在各种数据表示之间进行转换的功能特性

13个重大版本发布

0.14.0 2023年3月1日
0.13.0 2022年12月26日
0.12.0 2022年12月22日

#11 in #serde-yaml

Download history 2/week @ 2024-03-08 5/week @ 2024-03-15 30/week @ 2024-03-22 8/week @ 2024-03-29 2/week @ 2024-04-05

52 每月下载量
stdto 中使用

MIT/Apache

47KB
1.5K SLoC

Stdto

stdto提供了一组用于在各种数据表示之间进行转换的功能特性。

CI Crates.io Licensed Twitter

| 示例 | 文档 | 最新日志 |

stdto = "0.14.0"

目标

作为一名专门从事Rust区块链开发的开发者,我经常发现处理字节、哈希和JSON具有挑战性。Rust生态系统是去中心化的,许多流行的crate都很旧且复杂。这使得找到简单、抽象良好的解决方案变得困难。我创建了Stdto crate来解决这个问题。Stdto的目标是提供一个类似标准库的接口,使用户能够轻松地使用和理解原始数据结构。

特性

default = ["derive", "serde", "bytes", "hash", "json", "yaml", "toml", "file", "hex"]
cargo add stdto  # [derive, serde, bytes, hash, json, yaml, toml, file, hex]
cargo add stdto --features "derive bytes" # [derive, serde, bytes]
cargo add stdto --features "derive hash" # [derive, serde, bytes, hash]
cargo add stdto --features "derive json" # [derive, serde, json]
cargo add stdto --features "derive yaml" # [derive, serde, yaml]
cargo add stdto --features "derive toml" # [derive, serde, toml]
cargo add stdto --features "derive file" # [derive, serde, json, yaml, toml]
cargo add stdto --features "derive hex" # [derive, hex]

示例

use stdto::prelude::*;
// #[stdto::bytes(endian = "little")]
#[stdto::bytes]
struct Test {
    a: u32,
    b: String,
    c: [u8; 32],
    d: Vec<u8>,
    e: BTreeMap<String, f64>,
}

let bytes = Test { .. }.to_bytes();
let test = Test::from_bytes(bytes);
// Test::try_from_bytes(bytes).unwrap();
#[stdto::bytes]
#[stdto::hash]
struct Test {
    ...
}

let hash = test.to_hash::<sha2::Sha256>();
// Any digest crate implemented hasher type
#[stdto::json]
// #[stdto::yaml]
// #[stdto::toml]
struct Test {
    ...
}

let json = test.to_json();
let test = Test::from_json(json);
// Test::try_from_json(json).unwrap();

// let yaml = test.to_yaml();
// let test = Test::from_yaml(yaml);
// let toml = test.to_toml();
// let test = Test::from_toml(toml);
// Any AsRef<[u8]> or AsBytes implemented to hex

let hex = bytes.to_hex();
let hex = hash.to_hex();
let bytes = Vec::<u8>::from_hex(hex);
// Vec::<u8>::try_from_hex(hex).unwrap();

let mut arr = [0u8; 32];
arr.copy_from_hex(hex);
// Any AsRef<[u8]> or AsBytes implemented <-> String, &str

let arr = [72, 105, 77, 111, 109];
let s1 = arr.into_string(); // .try_into_string().unwrap();
let bytes = s1.to_bytes();
let s2 = bytes.as_str(); // .try_as_str().unwrap();

assert_eq!(s1, s2);

依赖关系

~0.5–1.8MB
~39K SLoC