13 个重大版本
0.14.0 | 2023 年 3 月 1 日 |
---|---|
0.13.0 | 2022 年 12 月 26 日 |
0.12.0 | 2022 年 12 月 22 日 |
#13 in #serde-yaml
52 每月下载量
用于 stdto
17KB
322 行
Stdto
stdto
提供了一组功能特性,用于在各种数据表示之间进行转换。
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);
依赖关系
~1.5MB
~36K SLoC