# [WIP] esyn [github](https://github.com/rsuu/esyn) [crates.io](https://crates.io/crates/esyn) [docs.rs](https://docs.rs/esyn) [build status](https://github.com/rsuu/esyn/actions?query=branch%3Amain) **De/Serialization Rust In Rust** ## Example ```rust fn main() { use esyn::*; #[derive(Debug, PartialEq, EsynDe, EsynSer)] struct Test { _string: String, _vec_u32: Vec, _opt_i64: Option, } 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::(config) .unwrap(); assert_eq!(test.get_ref(), &expect); // Serialization let code = quote! { fn main() { let test = #test; } } .into_pretty() .unwrap(); println!("{code}"); } ``` For more examples take a look on [tests](https://github.com/rsuu/esyn/tree/main/crates/esyn/tests). ## Features ## Suffix Syntax ```rust fn main() { // ... config.val = 123; } ``` ### Custom Syntax ```rust // ... #[derive(Debug, EsynDe, EsynSer, Default)] #[custom_syntax] struct Test { val: u8, } impl CustomSyntax for Test { // ... } // in config: // // fn main() { // let test = m!(123); // } // ... ``` see full example on [struct_custom_syntax](https://github.com/rsuu/esyn/tree/main/crates/esyn/tests/struct_custom_syntax.rs) ## Supported Types ```rust u8 u16 u32 u64 u128 usize i8 i16 i32 i64 i128 isize f32 f64 bool char String Vec Option Box Struct Enum Tuple ``` [see more](https://github.com/rsuu/esyn/tree/main/crates/esyn/src/ext.rs)