aboutsummaryrefslogtreecommitdiff
path: root/derive-macro/src
diff options
context:
space:
mode:
Diffstat (limited to 'derive-macro/src')
-rw-r--r--derive-macro/src/derives.rs10
-rw-r--r--derive-macro/src/dummies.rs14
-rw-r--r--derive-macro/src/lib.rs13
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()
}