aboutsummaryrefslogtreecommitdiff
path: root/mingling_macros/src
diff options
context:
space:
mode:
Diffstat (limited to 'mingling_macros/src')
-rw-r--r--mingling_macros/src/chain.rs5
-rw-r--r--mingling_macros/src/groupped.rs2
-rw-r--r--mingling_macros/src/lib.rs54
-rw-r--r--mingling_macros/src/pack.rs6
-rw-r--r--mingling_macros/src/renderer.rs5
5 files changed, 26 insertions, 46 deletions
diff --git a/mingling_macros/src/chain.rs b/mingling_macros/src/chain.rs
index fe48b59..7894362 100644
--- a/mingling_macros/src/chain.rs
+++ b/mingling_macros/src/chain.rs
@@ -297,8 +297,5 @@ pub fn register_chain(input: TokenStream) -> TokenStream {
chains.insert(chain_entry_str);
chain_exist.insert(chain_exist_entry_str);
- quote! {
- ::mingling::macros::register_type!(#previous_type);
- }
- .into()
+ quote! {}.into()
}
diff --git a/mingling_macros/src/groupped.rs b/mingling_macros/src/groupped.rs
index 5e0c3e9..980c08a 100644
--- a/mingling_macros/src/groupped.rs
+++ b/mingling_macros/src/groupped.rs
@@ -70,6 +70,8 @@ pub fn derive_groupped_serialize(input: TokenStream) -> TokenStream {
#[derive(serde::Serialize)]
#input_parsed
+ ::mingling::macros::register_type!(#struct_name);
+
impl ::mingling::Groupped<#group_ident> for #struct_name {
fn member_id() -> #group_ident {
#group_ident::#struct_name
diff --git a/mingling_macros/src/lib.rs b/mingling_macros/src/lib.rs
index 4ae9e43..8df8ad7 100644
--- a/mingling_macros/src/lib.rs
+++ b/mingling_macros/src/lib.rs
@@ -116,11 +116,13 @@ pub fn gen_program(input: TokenStream) -> TokenStream {
#[cfg(feature = "comp")]
let out = TokenStream::from(quote! {
- ::mingling::macros::program_gen_completion!(#name);
+ ::mingling::macros::program_comp_gen!(#name);
+ ::mingling::macros::program_fallback_gen!(#name);
::mingling::macros::program_final_gen!(#name);
});
#[cfg(not(feature = "comp"))]
let out = TokenStream::from(quote! {
+ ::mingling::macros::program_fallback_gen!(#name);
::mingling::macros::program_final_gen!(#name);
});
@@ -129,7 +131,7 @@ pub fn gen_program(input: TokenStream) -> TokenStream {
#[proc_macro]
#[cfg(feature = "comp")]
-pub fn program_gen_completion(input: TokenStream) -> TokenStream {
+pub fn program_comp_gen(input: TokenStream) -> TokenStream {
let name = read_name(&input);
#[cfg(feature = "async")]
@@ -210,12 +212,21 @@ pub fn register_renderer(input: TokenStream) -> TokenStream {
}
#[proc_macro]
+pub fn program_fallback_gen(input: TokenStream) -> TokenStream {
+ let name = read_name(&input);
+
+ let expanded = quote! {
+ ::mingling::macros::pack!(#name, RendererNotFound = String);
+ ::mingling::macros::pack!(#name, DispatcherNotFound = Vec<String>);
+ };
+ TokenStream::from(expanded)
+}
+
+#[proc_macro]
pub fn program_final_gen(input: TokenStream) -> TokenStream {
let name = read_name(&input);
- let mut packed_types = PACKED_TYPES.lock().unwrap().clone();
- packed_types.insert("DispatcherNotFound".to_string());
- packed_types.insert("RendererNotFound".to_string());
+ let packed_types = PACKED_TYPES.lock().unwrap().clone();
let renderers = RENDERERS.lock().unwrap().clone();
let chains = CHAINS.lock().unwrap().clone();
@@ -295,9 +306,6 @@ pub fn program_final_gen(input: TokenStream) -> TokenStream {
let comp = quote! {};
let expanded = quote! {
- ::mingling::macros::pack!(#name, RendererNotFound = String);
- ::mingling::macros::pack!(#name, DispatcherNotFound = Vec<String>);
-
#[derive(Debug, Default, PartialEq, Eq, Clone)]
#[repr(u32)]
pub enum #name {
@@ -355,36 +363,6 @@ pub fn program_final_gen(input: TokenStream) -> TokenStream {
TokenStream::from(expanded)
}
-/// Internal macro for registering chains.
-///
-/// This macro is used internally by the `#[chain]` attribute macro
-/// and should not be used directly.
-#[doc(hidden)]
-#[proc_macro]
-pub fn __register_chain(input: TokenStream) -> TokenStream {
- let chain_entry = parse_macro_input!(input as syn::LitStr);
- let entry_str = chain_entry.value();
-
- CHAINS.lock().unwrap().insert(entry_str);
-
- TokenStream::new()
-}
-
-/// Internal macro for registering renderers.
-///
-/// This macro is used internally by the `#[renderer]` attribute macro
-/// and should not be used directly.
-#[doc(hidden)]
-#[proc_macro]
-pub fn __register_renderer(input: TokenStream) -> TokenStream {
- let renderer_entry = parse_macro_input!(input as syn::LitStr);
- let entry_str = renderer_entry.value();
-
- RENDERERS.lock().unwrap().insert(entry_str);
-
- TokenStream::new()
-}
-
#[cfg(feature = "comp")]
#[proc_macro]
pub fn suggest(input: TokenStream) -> TokenStream {
diff --git a/mingling_macros/src/pack.rs b/mingling_macros/src/pack.rs
index 226dc35..9da16de 100644
--- a/mingling_macros/src/pack.rs
+++ b/mingling_macros/src/pack.rs
@@ -162,6 +162,10 @@ pub fn pack(input: TokenStream) -> TokenStream {
}
};
+ let register_impl = quote! {
+ ::mingling::macros::register_type!(#type_name);
+ };
+
let any_out_impl = quote! {
impl Into<mingling::AnyOutput<#group_name>> for #type_name {
fn into(self) -> mingling::AnyOutput<#group_name> {
@@ -207,6 +211,7 @@ pub fn pack(input: TokenStream) -> TokenStream {
#as_ref_impl
#deref_impl
#default_impl
+ #register_impl
impl Into<mingling::AnyOutput<ThisProgram>> for #type_name {
fn into(self) -> mingling::AnyOutput<ThisProgram> {
@@ -248,6 +253,7 @@ pub fn pack(input: TokenStream) -> TokenStream {
#as_ref_impl
#deref_impl
#default_impl
+ #register_impl
#any_out_impl
#group_impl
diff --git a/mingling_macros/src/renderer.rs b/mingling_macros/src/renderer.rs
index a3da2e7..38d7930 100644
--- a/mingling_macros/src/renderer.rs
+++ b/mingling_macros/src/renderer.rs
@@ -222,8 +222,5 @@ pub fn register_renderer(input: TokenStream) -> TokenStream {
#[cfg(feature = "general_renderer")]
general_renderers.insert(general_renderer_entry_str);
- quote! {
- ::mingling::macros::register_type!(#previous_type);
- }
- .into()
+ quote! {}.into()
}