|
|
@@ -1,23 +1,27 @@
|
|
|
extern crate proc_macro;
|
|
|
use proc_macro::TokenStream;
|
|
|
use proc_macro2::Span;
|
|
|
-use proc_macro_crate::crate_name;
|
|
|
+use proc_macro_crate::{crate_name, FoundCrate};
|
|
|
use syn::{Ident, ItemStruct};
|
|
|
|
|
|
use darkfi_derive_internal::{struct_de, struct_ser};
|
|
|
|
|
|
#[proc_macro_derive(SerialEncodable)]
|
|
|
pub fn darkfi_serialize(input: TokenStream) -> TokenStream {
|
|
|
- let cratename = Ident::new(
|
|
|
- &crate_name("darkfi").unwrap_or_else(|_| "crate".to_string()),
|
|
|
- Span::call_site(),
|
|
|
- );
|
|
|
+ let found_crate = crate_name("darkfi").expect("darkfi is found in Cargo.toml");
|
|
|
+
|
|
|
+ let found_crate = match found_crate {
|
|
|
+ FoundCrate::Name(name) => name,
|
|
|
+ FoundCrate::Itself => "crate".to_string(),
|
|
|
+ };
|
|
|
+
|
|
|
+ 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
|
|
|
- unreachable!()
|
|
|
+ todo!("Implement Enum and Union")
|
|
|
};
|
|
|
|
|
|
TokenStream::from(match res {
|
|
|
@@ -28,16 +32,20 @@ pub fn darkfi_serialize(input: TokenStream) -> TokenStream {
|
|
|
|
|
|
#[proc_macro_derive(SerialDecodable)]
|
|
|
pub fn darkfi_deserialize(input: TokenStream) -> TokenStream {
|
|
|
- let cratename = Ident::new(
|
|
|
- &crate_name("darkfi").unwrap_or_else(|_| "crate".to_string()),
|
|
|
- Span::call_site(),
|
|
|
- );
|
|
|
+ let found_crate = crate_name("darkfi").expect("darkfi is found in Cargo.toml");
|
|
|
+
|
|
|
+ let found_crate = match found_crate {
|
|
|
+ FoundCrate::Name(name) => name,
|
|
|
+ FoundCrate::Itself => "crate".to_string(),
|
|
|
+ };
|
|
|
+
|
|
|
+ let cratename = Ident::new(&found_crate, Span::call_site());
|
|
|
|
|
|
let res = if let Ok(input) = syn::parse::<ItemStruct>(input) {
|
|
|
struct_de(&input, cratename)
|
|
|
} else {
|
|
|
// For now we only allow derive on structs
|
|
|
- unreachable!()
|
|
|
+ todo!("Implement Enum and Union")
|
|
|
};
|
|
|
|
|
|
TokenStream::from(match res {
|