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