15个版本 (8个重大更改)
0.9.1 | 2024年5月21日 |
---|---|
0.8.2 | 2024年1月5日 |
0.8.1 | 2023年12月30日 |
0.8.0 | 2023年11月17日 |
0.4.1 | 2023年6月13日 |
#47 in #反序列化
每月下载量 31次
在 esyn 中使用
34KB
901 行
[WIP] esyn
在Rust中进行反/序列化
示例
fn main() {
use esyn::*;
#[derive(Debug, PartialEq, EsynDe, EsynSer)]
struct Test {
_string: String,
_vec_u32: Vec<u32>,
_opt_i64: Option<i64>,
}
let expect = Test {
_string: "hello".to_string(),
_vec_u32: vec![1, 2, 4],
_opt_i64: Some(-9223372036854775807),
};
let config = r#"
fn main() {
let test = Test {
_string: "hello",
_vec_u32: [1, 2, 4],
};
test._opt_i64 = Some(-9223372036854775807);
}
"#;
let test = EsynBuilder::new()
.set_fn("main")
.set_let("test")
.get_once::<Test>(config)
.unwrap();
assert_eq!(test.get_ref(), &expect);
// Serialization
let code = quote! {
fn main() {
let test = #test;
}
}
.into_pretty()
.unwrap();
println!("{code}");
}
更多示例请参考 测试。
功能
后缀语法
fn main() {
// ...
config.val = 123;
}
自定义语法
// ...
#[derive(Debug, EsynDe, EsynSer, Default)]
#[custom_syntax]
struct Test {
val: u8,
}
impl CustomSyntax for Test {
// ...
}
// in config:
//
// fn main() {
// let test = m!(123);
// }
// ...
请参阅 struct_custom_syntax 中的完整示例
支持类型
u8 u16 u32 u64 u128 usize
i8 i16 i32 i64 i128 isize
f32 f64
bool
char String
Vec<T>
Option<T>
Box<T>
Struct
Enum
Tuple
依赖项
~250–690KB
~16K SLoC