s2json_derive/
lib.rs

1use proc_macro::TokenStream;
2
3mod json;
4mod mvalue;
5mod prim_value;
6
7use json::generate_to_json;
8use mvalue::generate_to_mvalue;
9use prim_value::generate_to_value_prim;
10
11/// Derives the `MValueCompatible` trait for a struct to convert it to a `MValue`.
12#[proc_macro_derive(MValueCompatible)]
13pub fn mvalue_compatible_derive(input: TokenStream) -> TokenStream {
14    let ast = syn::parse(input).unwrap();
15    generate_to_mvalue(&ast)
16}
17
18/// Derives the `Properties` trait for a struct to convert it to a `Properties`.
19#[proc_macro_derive(Properties)]
20pub fn properties_derive(input: TokenStream) -> TokenStream {
21    let ast = syn::parse(input).unwrap();
22    generate_to_mvalue(&ast)
23}
24
25/// Derives the `MValue` trait for a struct to convert it to a `MValue`.
26#[proc_macro_derive(MValue)]
27pub fn mvalue_derive(input: TokenStream) -> TokenStream {
28    let ast = syn::parse(input).unwrap();
29    generate_to_mvalue(&ast)
30}
31
32/// Derives the `JSONProperties` trait for a struct to convert it to a `JSONProperties`.
33#[proc_macro_derive(JSONProperties)]
34pub fn json_properties_derive(input: TokenStream) -> TokenStream {
35    let ast = syn::parse(input).unwrap();
36    generate_to_json(&ast)
37}
38
39#[proc_macro_derive(ValuePrimitive)]
40pub fn primitive_value_derive(input: TokenStream) -> TokenStream {
41    let ast = syn::parse(input).unwrap();
42    generate_to_value_prim(&ast)
43}