diff options
| author | 魏曹先生 <1992414357@qq.com> | 2026-05-21 15:02:50 +0800 |
|---|---|---|
| committer | 魏曹先生 <1992414357@qq.com> | 2026-05-21 15:03:55 +0800 |
| commit | 4704f6d54108bcc8f9b2fb7f4b3c4e224b4a7809 (patch) | |
| tree | 425b15395de24717f9732d8642e75044774d4583 /mingling_macros/src/lib.rs | |
| parent | a9755711b490529c26bdb4b024c6caf825940dd3 (diff) | |
Remove `once_cell` dependency and replace with `OnceLock`
Diffstat (limited to 'mingling_macros/src/lib.rs')
| -rw-r--r-- | mingling_macros/src/lib.rs | 58 |
1 files changed, 29 insertions, 29 deletions
diff --git a/mingling_macros/src/lib.rs b/mingling_macros/src/lib.rs index badb117..29c46b4 100644 --- a/mingling_macros/src/lib.rs +++ b/mingling_macros/src/lib.rs @@ -17,12 +17,12 @@ //! - **Internal registration**: `register_type!`, `register_chain!`, `register_renderer!`, //! `program_fallback_gen!`, `program_final_gen!`, `program_comp_gen!` -use once_cell::sync::Lazy; use proc_macro::TokenStream; use proc_macro2::Ident; use quote::quote; use std::collections::BTreeSet; use std::sync::Mutex; +use std::sync::OnceLock; use syn::parse_macro_input; mod chain; @@ -55,29 +55,26 @@ pub(crate) fn default_program_path() -> proc_macro2::TokenStream { quote::quote! { crate::ThisProgram } } +// Helper to get or init a OnceLock<Mutex<BTreeSet<String>>> +pub(crate) fn get_global_set(lock: &OnceLock<Mutex<BTreeSet<String>>>) -> &Mutex<BTreeSet<String>> { + lock.get_or_init(|| Mutex::new(BTreeSet::new())) +} + // Global variables #[cfg(feature = "general_renderer")] -pub(crate) static GENERAL_RENDERERS: Lazy<Mutex<BTreeSet<String>>> = - Lazy::new(|| Mutex::new(BTreeSet::new())); +pub(crate) static GENERAL_RENDERERS: OnceLock<Mutex<BTreeSet<String>>> = OnceLock::new(); #[cfg(feature = "comp")] -pub(crate) static COMPLETIONS: Lazy<Mutex<BTreeSet<String>>> = - Lazy::new(|| Mutex::new(BTreeSet::new())); +pub(crate) static COMPLETIONS: OnceLock<Mutex<BTreeSet<String>>> = OnceLock::new(); #[cfg(feature = "dispatch_tree")] -pub(crate) static COMPILE_TIME_DISPATCHERS: Lazy<Mutex<BTreeSet<String>>> = - Lazy::new(|| Mutex::new(BTreeSet::new())); - -pub(crate) static PACKED_TYPES: Lazy<Mutex<BTreeSet<String>>> = - Lazy::new(|| Mutex::new(BTreeSet::new())); -pub(crate) static CHAINS: Lazy<Mutex<BTreeSet<String>>> = Lazy::new(|| Mutex::new(BTreeSet::new())); -pub(crate) static RENDERERS: Lazy<Mutex<BTreeSet<String>>> = - Lazy::new(|| Mutex::new(BTreeSet::new())); -pub(crate) static CHAINS_EXIST: Lazy<Mutex<BTreeSet<String>>> = - Lazy::new(|| Mutex::new(BTreeSet::new())); -pub(crate) static RENDERERS_EXIST: Lazy<Mutex<BTreeSet<String>>> = - Lazy::new(|| Mutex::new(BTreeSet::new())); -pub(crate) static HELP_REQUESTS: Lazy<Mutex<BTreeSet<String>>> = - Lazy::new(|| Mutex::new(BTreeSet::new())); +pub(crate) static COMPILE_TIME_DISPATCHERS: OnceLock<Mutex<BTreeSet<String>>> = OnceLock::new(); + +pub(crate) static PACKED_TYPES: OnceLock<Mutex<BTreeSet<String>>> = OnceLock::new(); +pub(crate) static CHAINS: OnceLock<Mutex<BTreeSet<String>>> = OnceLock::new(); +pub(crate) static RENDERERS: OnceLock<Mutex<BTreeSet<String>>> = OnceLock::new(); +pub(crate) static CHAINS_EXIST: OnceLock<Mutex<BTreeSet<String>>> = OnceLock::new(); +pub(crate) static RENDERERS_EXIST: OnceLock<Mutex<BTreeSet<String>>> = OnceLock::new(); +pub(crate) static HELP_REQUESTS: OnceLock<Mutex<BTreeSet<String>>> = OnceLock::new(); /// Checks that a TypePath is a simple single-segment identifier (no `::` in the path). /// @@ -1137,7 +1134,10 @@ pub fn register_type(input: TokenStream) -> TokenStream { let type_ident = parse_macro_input!(input as syn::Ident); let entry_str = type_ident.to_string(); - PACKED_TYPES.lock().unwrap().insert(entry_str); + get_global_set(&PACKED_TYPES) + .lock() + .unwrap() + .insert(entry_str); TokenStream::new() } @@ -1280,18 +1280,18 @@ pub fn program_fallback_gen(input: TokenStream) -> TokenStream { pub fn program_final_gen(input: TokenStream) -> TokenStream { let name = read_name(&input); - let packed_types = PACKED_TYPES.lock().unwrap().clone(); + let packed_types = get_global_set(&PACKED_TYPES).lock().unwrap().clone(); - let renderers = RENDERERS.lock().unwrap().clone(); - let chains = CHAINS.lock().unwrap().clone(); - let renderer_exist = RENDERERS_EXIST.lock().unwrap().clone(); - let chain_exist = CHAINS_EXIST.lock().unwrap().clone(); + let renderers = get_global_set(&RENDERERS).lock().unwrap().clone(); + let chains = get_global_set(&CHAINS).lock().unwrap().clone(); + let renderer_exist = get_global_set(&RENDERERS_EXIST).lock().unwrap().clone(); + let chain_exist = get_global_set(&CHAINS_EXIST).lock().unwrap().clone(); #[cfg(feature = "general_renderer")] - let general_renderers = GENERAL_RENDERERS.lock().unwrap().clone(); + let general_renderers = get_global_set(&GENERAL_RENDERERS).lock().unwrap().clone(); #[cfg(feature = "comp")] - let completions = COMPLETIONS.lock().unwrap().clone(); + let completions = get_global_set(&COMPLETIONS).lock().unwrap().clone(); let packed_types: Vec<proc_macro2::TokenStream> = packed_types .iter() @@ -1341,7 +1341,7 @@ pub fn program_final_gen(input: TokenStream) -> TokenStream { let general_render = quote! {}; #[cfg(feature = "dispatch_tree")] - let compile_time_dispatchers: Vec<String> = COMPILE_TIME_DISPATCHERS + let compile_time_dispatchers: Vec<String> = get_global_set(&COMPILE_TIME_DISPATCHERS) .lock() .unwrap() .clone() @@ -1398,7 +1398,7 @@ pub fn program_final_gen(input: TokenStream) -> TokenStream { #[cfg(not(feature = "comp"))] let comp = quote! {}; - let help_tokens: Vec<proc_macro2::TokenStream> = HELP_REQUESTS + let help_tokens: Vec<proc_macro2::TokenStream> = get_global_set(&HELP_REQUESTS) .lock() .unwrap() .clone() |
