diff options
Diffstat (limited to 'derive-macro')
-rw-r--r-- | derive-macro/src/derives.rs | 10 | ||||
-rw-r--r-- | derive-macro/src/dummies.rs | 14 | ||||
-rw-r--r-- | derive-macro/src/lib.rs | 13 |
3 files changed, 29 insertions, 8 deletions
diff --git a/derive-macro/src/derives.rs b/derive-macro/src/derives.rs index fdb83a0d..3db58586 100644 --- a/derive-macro/src/derives.rs +++ b/derive-macro/src/derives.rs @@ -9,7 +9,7 @@ use syn::{self, Data, DataStruct, DeriveInput, Field, Fields, Generics, Ident}; use crate::dummies; use crate::item::Item; -pub fn derive_ini(input: &DeriveInput) -> TokenStream { +pub fn derive_ini_parse(input: &DeriveInput) -> TokenStream { let ident = &input.ident; match input.data { @@ -17,7 +17,7 @@ pub fn derive_ini(input: &DeriveInput) -> TokenStream { fields: Fields::Named(ref fields), .. }) => { - dummies::ini(ident); + dummies::ini_parse(ident); let item = Item::from_args_struct(input); let fields = fields @@ -30,10 +30,14 @@ pub fn derive_ini(input: &DeriveInput) -> TokenStream { .collect::<Vec<_>>(); gen_for_struct(&item, ident, &input.generics, &fields) } - _ => abort_call_site!("`#[derive(Ini)]` only supports non-tuple structs"), + _ => abort_call_site!("`#[derive(IniParse)]` only supports non-tuple structs"), } } +pub fn derive_ini_dump(input: &DeriveInput) -> TokenStream { + abort_call_site!("`#[derive(IniDump)]` is not implemented") +} + fn gen_for_struct( item: &Item, name: &Ident, diff --git a/derive-macro/src/dummies.rs b/derive-macro/src/dummies.rs index 3abd39a4..e61e2e8c 100644 --- a/derive-macro/src/dummies.rs +++ b/derive-macro/src/dummies.rs @@ -4,10 +4,20 @@ use proc_macro2::Ident; use proc_macro_error::append_dummy; use quote::quote; -pub fn ini(name: &Ident) { +pub fn ini_parse(name: &Ident) { append_dummy(quote! { impl #name { - pub fn parse<'a>(i: &'a ::ini::Ini) -> ::std::Result<Self, ::ini::Error> { + pub fn parse_ini<'a>(i: &'a ::ini::Ini) -> ::std::Result<Self, ::ini::Error> { + unimplemented!() + } + } + }); +} + +pub fn ini_dump(name: &Ident) { + append_dummy(quote! { + impl #name { + pub fn dump_ini<'b>(&self, to: &'b dyn ::std::io::Write) -> ::std::io::Result<()> { unimplemented!() } } diff --git a/derive-macro/src/lib.rs b/derive-macro/src/lib.rs index 513c2b20..8bd5931b 100644 --- a/derive-macro/src/lib.rs +++ b/derive-macro/src/lib.rs @@ -14,9 +14,16 @@ mod dummies; mod item; mod spanned; -#[proc_macro_derive(IniMap, attributes(key, default, parse_with))] +#[proc_macro_derive(IniParse, attributes(key, default, parse_with))] #[proc_macro_error] -pub fn ini(input: TokenStream) -> TokenStream { +pub fn ini_parse(input: TokenStream) -> TokenStream { let input: DeriveInput = parse_macro_input!(input); - derives::derive_ini(&input).into() + derives::derive_ini_parse(&input).into() +} + +#[proc_macro_derive(IniDump, attributes(key, default, parse_with))] +#[proc_macro_error] +pub fn ini_dump(input: TokenStream) -> TokenStream { + let input: DeriveInput = parse_macro_input!(input); + derives::derive_ini_dump(&input).into() } |