|
@@ -2,9 +2,9 @@ extern crate proc_macro;
|
|
|
use proc_macro::TokenStream;
|
|
use proc_macro::TokenStream;
|
|
|
use proc_macro2::Span;
|
|
use proc_macro2::Span;
|
|
|
use proc_macro_crate::{crate_name, FoundCrate};
|
|
use proc_macro_crate::{crate_name, FoundCrate};
|
|
|
-use syn::{Ident, ItemStruct};
|
|
|
|
|
|
|
+use syn::{Ident, Item, ItemStruct};
|
|
|
|
|
|
|
|
-use darkfi_derive_internal::{struct_de, struct_ser};
|
|
|
|
|
|
|
+use darkfi_derive_internal::{enum_ser, struct_de, struct_ser};
|
|
|
|
|
|
|
|
#[proc_macro_derive(SerialEncodable, attributes(skip_serialize))]
|
|
#[proc_macro_derive(SerialEncodable, attributes(skip_serialize))]
|
|
|
pub fn darkfi_serialize(input: TokenStream) -> TokenStream {
|
|
pub fn darkfi_serialize(input: TokenStream) -> TokenStream {
|
|
@@ -17,11 +17,10 @@ pub fn darkfi_serialize(input: TokenStream) -> TokenStream {
|
|
|
|
|
|
|
|
let cratename = Ident::new(&found_crate, Span::call_site());
|
|
let cratename = Ident::new(&found_crate, Span::call_site());
|
|
|
|
|
|
|
|
- let res = if let Ok(input) = syn::parse::<ItemStruct>(input) {
|
|
|
|
|
- struct_ser(&input, cratename)
|
|
|
|
|
- } else {
|
|
|
|
|
- // For now we only allow derive on structs
|
|
|
|
|
- todo!("Implement Enum and Union")
|
|
|
|
|
|
|
+ let res = match syn::parse(input).unwrap() {
|
|
|
|
|
+ Item::Struct(strc) => struct_ser(&strc, cratename),
|
|
|
|
|
+ Item::Enum(enu) => enum_ser(&enu, cratename),
|
|
|
|
|
+ _ => todo!("Not implemented type"),
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
TokenStream::from(match res {
|
|
TokenStream::from(match res {
|