diff --git a/Cargo.lock b/Cargo.lock index 2fb64eeaf..bb87dc680 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1607,7 +1607,7 @@ name = "darkfi-derive" version = "0.3.0" dependencies = [ "darkfi-derive-internal", - "proc-macro-crate 0.1.5", + "proc-macro-crate 1.1.3", "proc-macro2 1.0.36", "syn 1.0.89", ] diff --git a/src/util/derive/Cargo.toml b/src/util/derive/Cargo.toml index f13bc52a2..cb27723cd 100644 --- a/src/util/derive/Cargo.toml +++ b/src/util/derive/Cargo.toml @@ -7,7 +7,7 @@ edition = "2021" proc-macro = true [dependencies] -proc-macro-crate = "0.1.5" +proc-macro-crate = "1.1.3" proc-macro2 = "1.0.36" syn = {version = "1.0.89", features = ["full", "fold"]} diff --git a/src/util/derive/src/lib.rs b/src/util/derive/src/lib.rs index 23b96ff5b..794adb271 100644 --- a/src/util/derive/src/lib.rs +++ b/src/util/derive/src/lib.rs @@ -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::(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::(input) { struct_de(&input, cratename) } else { // For now we only allow derive on structs - unreachable!() + todo!("Implement Enum and Union") }; TokenStream::from(match res {