aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHampusM <hampus@hampusmat.com>2022-07-18 21:14:14 +0200
committerHampusM <hampus@hampusmat.com>2022-07-18 21:14:14 +0200
commit47b135ce63e7a0c0f2ebfcf518dbb13e68b5eddc (patch)
tree10f49fae25c774aefc57c82aa260086a2e01960c
parent8976c166cff4c98c43cdc409275f548eb27ecb13 (diff)
refactor: rename the castable_to macro to declare_interface
-rw-r--r--syrette/src/libs/intertrait/mod.rs2
-rw-r--r--syrette_macros/src/declare_interface_args.rs23
-rw-r--r--syrette_macros/src/lib.rs30
-rw-r--r--syrette_macros/src/libs/intertrait_macros/args.rs36
-rw-r--r--syrette_macros/src/libs/intertrait_macros/mod.rs1
5 files changed, 43 insertions, 49 deletions
diff --git a/syrette/src/libs/intertrait/mod.rs b/syrette/src/libs/intertrait/mod.rs
index e7b3bdd..3c7b27a 100644
--- a/syrette/src/libs/intertrait/mod.rs
+++ b/syrette/src/libs/intertrait/mod.rs
@@ -20,8 +20,6 @@ use once_cell::sync::Lazy;
extern crate linkme;
-pub use syrette_macros::castable_to;
-
mod hasher;
use hasher::BuildFastHasher;
diff --git a/syrette_macros/src/declare_interface_args.rs b/syrette_macros/src/declare_interface_args.rs
new file mode 100644
index 0000000..b54f458
--- /dev/null
+++ b/syrette_macros/src/declare_interface_args.rs
@@ -0,0 +1,23 @@
+use syn::parse::{Parse, ParseStream, Result};
+use syn::{Path, Token, Type};
+
+pub struct DeclareInterfaceArgs
+{
+ pub implementation: Type,
+ pub interface: Path,
+}
+
+impl Parse for DeclareInterfaceArgs
+{
+ fn parse(input: ParseStream) -> Result<Self>
+ {
+ let implementation: Type = input.parse()?;
+
+ input.parse::<Token![->]>()?;
+
+ Ok(Self {
+ implementation,
+ interface: input.parse()?,
+ })
+ }
+}
diff --git a/syrette_macros/src/lib.rs b/syrette_macros/src/lib.rs
index 0a6f0e7..33c9b86 100644
--- a/syrette_macros/src/lib.rs
+++ b/syrette_macros/src/lib.rs
@@ -2,15 +2,17 @@ use proc_macro::TokenStream;
use quote::quote;
use syn::{parse, parse_macro_input};
+mod declare_interface_args;
mod factory_type_alias;
mod injectable_impl;
mod injectable_macro_args;
mod libs;
+use declare_interface_args::DeclareInterfaceArgs;
use factory_type_alias::FactoryTypeAlias;
use injectable_impl::InjectableImpl;
use injectable_macro_args::InjectableMacroArgs;
-use libs::intertrait_macros::{args::Cast, gen_caster::generate_caster};
+use libs::intertrait_macros::gen_caster::generate_caster;
/// Makes a struct injectable. Thereby usable with `DIContainer`.
///
@@ -65,7 +67,7 @@ pub fn injectable(args_stream: TokenStream, impl_stream: TokenStream) -> TokenSt
quote! {
#expanded_injectable_impl
- syrette::castable_to!(#self_type => #interface_type_path);
+ syrette::declare_interface!(#self_type -> #interface_type_path);
}
.into()
}
@@ -125,28 +127,36 @@ pub fn factory(_: TokenStream, type_alias_stream: TokenStream) -> TokenStream
quote! {
#type_alias
- syrette::castable_to!(
+ syrette::declare_interface!(
syrette::castable_factory::CastableFactory<
#arg_types,
#return_type
- > => #factory_interface
+ > -> #factory_interface
);
- syrette::castable_to!(
+ syrette::declare_interface!(
syrette::castable_factory::CastableFactory<
#arg_types,
#return_type
- > => syrette::castable_factory::AnyFactory
+ > -> syrette::castable_factory::AnyFactory
);
}
.into()
}
-#[doc(hidden)]
+/// Declares the interface trait of a implementation.
+///
+/// # Examples
+/// ```
+/// declare_interface!(IClientService -> ClientService);
+/// ```
#[proc_macro]
-pub fn castable_to(input: TokenStream) -> TokenStream
+pub fn declare_interface(input: TokenStream) -> TokenStream
{
- let Cast { ty, target } = parse_macro_input!(input);
+ let DeclareInterfaceArgs {
+ implementation,
+ interface,
+ } = parse_macro_input!(input);
- generate_caster(&ty, &target).into()
+ generate_caster(&implementation, &interface).into()
}
diff --git a/syrette_macros/src/libs/intertrait_macros/args.rs b/syrette_macros/src/libs/intertrait_macros/args.rs
deleted file mode 100644
index a49567f..0000000
--- a/syrette_macros/src/libs/intertrait_macros/args.rs
+++ /dev/null
@@ -1,36 +0,0 @@
-/**
- * Originally from Intertrait by CodeChain
- *
- * https://github.com/CodeChain-io/intertrait
- * https://crates.io/crates/intertrait/0.2.2
- *
- * Licensed under either of
- *
- * Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- * MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
-
- * at your option.
-*/
-use syn::parse::{Parse, ParseStream, Result};
-use syn::{Path, Token, Type};
-
-pub struct Cast
-{
- pub ty: Type,
- pub target: Path,
-}
-
-impl Parse for Cast
-{
- fn parse(input: ParseStream) -> Result<Self>
- {
- let ty: Type = input.parse()?;
-
- input.parse::<Token![=>]>()?;
-
- Ok(Cast {
- ty,
- target: input.parse()?,
- })
- }
-}
diff --git a/syrette_macros/src/libs/intertrait_macros/mod.rs b/syrette_macros/src/libs/intertrait_macros/mod.rs
index 7904663..da9775a 100644
--- a/syrette_macros/src/libs/intertrait_macros/mod.rs
+++ b/syrette_macros/src/libs/intertrait_macros/mod.rs
@@ -11,5 +11,4 @@
* at your option.
*/
-pub mod args;
pub mod gen_caster;