13个重大版本发布
0.14.0 | 2023年3月1日 |
---|---|
0.13.0 | 2022年12月26日 |
0.12.0 | 2022年12月22日 |
#2095 在 编码
每月下载量:39
62KB
1.5K SLoC
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);
依赖项
~0.3–1.4MB
~30K SLoC