Skip to content

Commit b1aa6d0

Browse files
committed
feat(schema): remove need for user crate to depend on parking_lot
1 parent add30b6 commit b1aa6d0

File tree

2 files changed

+16
-13
lines changed

2 files changed

+16
-13
lines changed

framework_crates/bones_schema/macros/src/lib.rs

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -282,17 +282,16 @@ pub fn derive_has_schema(input: TokenStream) -> TokenStream {
282282

283283
let register_schema = if input.generic_params().is_some() {
284284
quote! {
285-
static S: OnceLock<RwLock<HashMap<TypeId, &'static #schema_mod::Schema>>> = OnceLock::new();
286285
let schema = {
287-
S.get_or_init(Default::default)
286+
#schema_mod::registry::GENERIC_SCHEMA_CACHE
288287
.read()
289288
.get(&TypeId::of::<Self>())
290289
.copied()
291290
};
292291
schema.unwrap_or_else(|| {
293292
let schema = compute_schema();
294293

295-
S.get_or_init(Default::default)
294+
#schema_mod::registry::GENERIC_SCHEMA_CACHE
296295
.write()
297296
.insert(TypeId::of::<Self>(), schema);
298297

@@ -395,27 +394,22 @@ pub fn derive_has_schema(input: TokenStream) -> TokenStream {
395394
quote! {
396395
unsafe impl<#impl_bounds> #schema_mod::HasSchema for #name<#struct_params> {
397396
fn schema() -> &'static #schema_mod::Schema {
398-
use ::std::sync::OnceLock;
399-
use ::std::any::TypeId;
400-
use bones_utils::HashMap;
401-
use parking_lot::RwLock;
402-
static S: OnceLock<RwLock<HashMap<TypeId, &'static #schema_mod::Schema>>> = OnceLock::new();
397+
use ::std::{any::TypeId, sync::OnceLock};
403398
let schema = {
404-
S.get_or_init(Default::default)
399+
#schema_mod::registry::GENERIC_SCHEMA_CACHE
405400
.read()
406401
.get(&TypeId::of::<Self>())
407402
.copied()
408403
};
409404
schema.unwrap_or_else(|| {
410405
let schema = #schema_register;
411406

412-
S.get_or_init(Default::default)
407+
#schema_mod::registry::GENERIC_SCHEMA_CACHE
413408
.write()
414409
.insert(TypeId::of::<Self>(), schema);
415410

416411
schema
417412
})
418-
419413
}
420414
}
421415
}

framework_crates/bones_schema/src/registry.rs

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,16 @@
22
33
use std::{
44
alloc::Layout,
5-
sync::atomic::{AtomicU32, Ordering::SeqCst},
5+
any::TypeId,
6+
sync::{
7+
atomic::{AtomicU32, Ordering::SeqCst},
8+
LazyLock,
9+
},
610
};
711

812
use append_only_vec::AppendOnlyVec;
9-
use bones_utils::Deref;
13+
use bones_utils::{Deref, HashMap};
14+
use parking_lot::RwLock;
1015

1116
use crate::prelude::*;
1217

@@ -143,6 +148,10 @@ pub static SCHEMA_REGISTRY: SchemaRegistry = SchemaRegistry {
143148
schemas: AppendOnlyVec::new(),
144149
};
145150

151+
#[doc(hidden)]
152+
pub static GENERIC_SCHEMA_CACHE: LazyLock<RwLock<HashMap<TypeId, &'static Schema>>> =
153+
LazyLock::new(Default::default);
154+
146155
#[cfg(test)]
147156
mod test {
148157
use bones_utils::default;

0 commit comments

Comments
 (0)