1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134
extern crate proc_macro; #[macro_use] mod shared; //mod serde_bin; //use crate::serde_bin::*; //mod serde_ron; //use crate::serde_ron::*; mod serde_json; mod parse; use crate::serde_json::*; #[proc_macro_derive(SerBin)] pub fn derive_ser_bin(_input: proc_macro::TokenStream) -> proc_macro::TokenStream { // let input = parse_macro_input!(input as DeriveInput); // // ok we have an ident, its either a struct or a enum // let ts = match &input.data { // Data::Struct(DataStruct {fields: Fields::Named(fields), ..}) => { // derive_ser_bin_struct(&input, fields) // }, // Data::Struct(DataStruct {fields: Fields::Unnamed(fields), ..}) => { // derive_ser_bin_struct_unnamed(&input, fields) // }, // Data::Enum(enumeration) => { // derive_ser_bin_enum(&input, enumeration) // }, // _ => error(Span::call_site(), "only structs or enums supported") // }; // proc_macro::TokenStream::from(ts) unimplemented!() } #[proc_macro_derive(DeBin)] pub fn derive_de_bin(_input: proc_macro::TokenStream) -> proc_macro::TokenStream { // let input = parse_macro_input!(input as DeriveInput); // // ok we have an ident, its either a struct or a enum // let ts = match &input.data { // Data::Struct(DataStruct {fields: Fields::Named(fields), ..}) => { // derive_de_bin_struct(&input, fields) // }, // Data::Struct(DataStruct {fields: Fields::Unnamed(fields), ..}) => { // derive_de_bin_struct_unnamed(&input, fields) // }, // Data::Enum(enumeration) => { // derive_de_bin_enum(&input, enumeration) // }, // _ => error(Span::call_site(), "only structs or enums supported") // }; // proc_macro::TokenStream::from(ts) unimplemented!() } #[proc_macro_derive(SerRon)] pub fn derive_ser_ron(_input: proc_macro::TokenStream) -> proc_macro::TokenStream { // let input = parse_macro_input!(input as DeriveInput); // // ok we have an ident, its either a struct or a enum // let ts = match &input.data { // Data::Struct(DataStruct {fields: Fields::Named(fields), ..}) => { // derive_ser_ron_struct(&input, fields) // }, // Data::Struct(DataStruct {fields: Fields::Unnamed(fields), ..}) => { // derive_ser_ron_struct_unnamed(&input, fields) // }, // Data::Enum(enumeration) => { // derive_ser_ron_enum(&input, enumeration) // }, // _ => error(Span::call_site(), "only structs or enums supported") // }; // proc_macro::TokenStream::from(ts) unimplemented!() } #[proc_macro_derive(DeRon)] pub fn derive_de_ron(_input: proc_macro::TokenStream) -> proc_macro::TokenStream { // let input = parse_macro_input!(input as DeriveInput); // // ok we have an ident, its either a struct or a enum // let ts = match &input.data { // Data::Struct(DataStruct {fields: Fields::Named(fields), ..}) => { // derive_de_ron_struct(&input, fields) // }, // Data::Struct(DataStruct {fields: Fields::Unnamed(fields), ..}) => { // derive_de_ron_struct_unnamed(&input, fields) // }, // Data::Enum(enumeration) => { // derive_de_ron_enum(&input, enumeration) // }, // _ => error(Span::call_site(), "only structs or enums supported") // }; // //println!("{}", ts.to_string()); // proc_macro::TokenStream::from(ts) unimplemented!() } #[proc_macro_derive(SerJson)] pub fn derive_ser_json(_input: proc_macro::TokenStream) -> proc_macro::TokenStream { // let input = parse_macro_input!(input as DeriveInput); // // ok we have an ident, its either a struct or a enum // let ts = match &input.data { // Data::Struct(DataStruct {fields: Fields::Named(fields), ..}) => { // derive_ser_json_struct(&input, fields) // }, // Data::Struct(DataStruct {fields: Fields::Unnamed(fields), ..}) => { // derive_ser_json_struct_unnamed(&input, fields) // }, // Data::Enum(enumeration) => { // derive_ser_json_enum(&input, enumeration) // }, // _ => error(Span::call_site(), "only structs or enums supported") // }; // proc_macro::TokenStream::from(ts) unimplemented!() } #[proc_macro_derive(DeJson)] pub fn derive_de_json(input: proc_macro::TokenStream) -> proc_macro::TokenStream { let input = parse::parse_data(input); // // ok we have an ident, its either a struct or a enum let ts = match &input { parse::Data::Struct(struct_) => derive_de_json_struct(struct_), _ => unimplemented!("Only structs are supported"), }; ts }