diff --git a/Cargo.lock b/Cargo.lock index 6e73c18..b9aef22 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -68,6 +68,7 @@ version = "0.2.0" dependencies = [ "quickfig_core", "quickfig_derive", + "serde", ] [[package]] diff --git a/quickfig/Cargo.toml b/quickfig/Cargo.toml index 696c0b3..59078e7 100644 --- a/quickfig/Cargo.toml +++ b/quickfig/Cargo.toml @@ -10,6 +10,7 @@ repository.workspace = true readme = "../README.md" [dependencies] +serde = { workspace = true } quickfig_core = { version = "0.2.0", path = "../quickfig_core" } quickfig_derive = { version = "0.2.0", path = "../quickfig_derive", optional = true } diff --git a/quickfig/src/lib.rs b/quickfig/src/lib.rs index f055e3d..c7cbe48 100644 --- a/quickfig/src/lib.rs +++ b/quickfig/src/lib.rs @@ -248,6 +248,8 @@ //! ); //! ``` +pub use serde; + /// * Core library /// * Only import `quickfig::core::ConfigFields` if you are manually implementing, /// if you are deriving use `quickfig::derive::ConfigFields` diff --git a/quickfig_derive/src/lib.rs b/quickfig_derive/src/lib.rs index 1db5526..dd29a65 100644 --- a/quickfig_derive/src/lib.rs +++ b/quickfig_derive/src/lib.rs @@ -6,12 +6,6 @@ use quote::{quote, ToTokens}; use syn::{ meta::ParseNestedMeta, parse_macro_input, Attribute, Data, DeriveInput, Ident, Lit, Meta, Type, LitStr, punctuated::Punctuated, Token }; -use anyhow::Result; -use quickfig_core::{ - FieldMarker, - Field, - ConfigFields, -}; // https://doc.rust-lang.org/book/ch20-05-macros.html @@ -138,21 +132,21 @@ fn impl_config_field_macro(ast: &syn::DeriveInput) -> TokenStream { let impl_gen = quote! { - impl quickfig::core::ConfigFields for #name {} + impl ::quickfig::core::ConfigFields for #name {} trait #trait_ident where - S: serde::de::DeserializeOwned + quickfig::core::config_types::DeserializedConfig, + S: ::quickfig::serde::de::DeserializeOwned + ::quickfig::core::config_types::DeserializedConfig, { - type CF: quickfig::core::ConfigFields; + type CF: ::quickfig::core::ConfigFields; fn get<'a>(&'a self, user_enum: Self::CF) -> - std::option::Option>>; + std::option::Option>>; } - impl #trait_ident for quickfig::core::Config { + impl #trait_ident<::quickfig::core::config_types::JSON> for ::quickfig::core::Config<::quickfig::core::config_types::JSON> { type CF = #name; - fn get<'a>(&'a self, user_enum: Self::CF) -> std::option::Option>> { + fn get<'a>(&'a self, user_enum: Self::CF) -> std::option::Option>> { // TODO // Each arm in this match statement returns Option> @@ -166,10 +160,10 @@ fn impl_config_field_macro(ast: &syn::DeriveInput) -> TokenStream { } } - impl #trait_ident for quickfig::core::Config { + impl #trait_ident<::quickfig::core::config_types::TOML> for ::quickfig::core::Config<::quickfig::core::config_types::TOML> { type CF = #name; - fn get<'a>(&'a self, user_enum: Self::CF) -> std::option::Option>> { + fn get<'a>(&'a self, user_enum: Self::CF) -> std::option::Option>> { match user_enum { #(#match_arms)*,