Skip to content

Commit 5c1629c

Browse files
CAD97james7132
authored andcommitted
Move primitive type registration into bevy_reflect (bevyengine#4844)
# Objective - Users of bevy_reflect probably always want primitive types registered. ## Solution - Register them by default. --- This is a minor incremental change along the path of [removing catch-all functionality from bevy_core](bevyengine#2931).
1 parent 88b4cfd commit 5c1629c

File tree

2 files changed

+40
-21
lines changed

2 files changed

+40
-21
lines changed

crates/bevy_core/src/lib.rs

Lines changed: 3 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -32,34 +32,17 @@ impl Plugin for CorePlugin {
3232
.unwrap_or_default()
3333
.create_default_pools(&mut app.world);
3434

35-
app.register_type::<HashSet<String>>()
36-
.register_type::<Option<String>>()
37-
.register_type::<Entity>()
38-
.register_type::<Name>()
39-
.register_type::<Range<f32>>();
35+
app.register_type::<Entity>().register_type::<Name>();
4036

4137
register_rust_types(app);
4238
register_math_types(app);
4339
}
4440
}
4541

4642
fn register_rust_types(app: &mut App) {
47-
app.register_type::<bool>()
48-
.register_type::<u8>()
49-
.register_type::<u16>()
50-
.register_type::<u32>()
51-
.register_type::<u64>()
52-
.register_type::<u128>()
53-
.register_type::<usize>()
54-
.register_type::<i8>()
55-
.register_type::<i16>()
56-
.register_type::<i32>()
57-
.register_type::<i64>()
58-
.register_type::<i128>()
59-
.register_type::<isize>()
60-
.register_type::<f32>()
61-
.register_type::<f64>()
43+
app.register_type::<Range<f32>>()
6244
.register_type::<String>()
45+
.register_type::<HashSet<String>>()
6346
.register_type::<Option<String>>();
6447
}
6548

crates/bevy_reflect/src/type_registry.rs

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ use serde::Deserialize;
66
use std::{any::TypeId, fmt::Debug, sync::Arc};
77

88
/// A registry of reflected types.
9-
#[derive(Default)]
109
pub struct TypeRegistry {
1110
registrations: HashMap<TypeId, TypeRegistration>,
1211
short_name_to_id: HashMap<String, TypeId>,
@@ -35,7 +34,44 @@ pub trait GetTypeRegistration {
3534
fn get_type_registration() -> TypeRegistration;
3635
}
3736

37+
impl Default for TypeRegistry {
38+
fn default() -> Self {
39+
Self::new()
40+
}
41+
}
42+
3843
impl TypeRegistry {
44+
/// Create a type registry with *no* registered types.
45+
pub fn empty() -> Self {
46+
Self {
47+
registrations: Default::default(),
48+
short_name_to_id: Default::default(),
49+
full_name_to_id: Default::default(),
50+
ambiguous_names: Default::default(),
51+
}
52+
}
53+
54+
/// Create a type registry with default registrations for primitive types.
55+
pub fn new() -> Self {
56+
let mut registry = Self::empty();
57+
registry.register::<bool>();
58+
registry.register::<u8>();
59+
registry.register::<u16>();
60+
registry.register::<u32>();
61+
registry.register::<u64>();
62+
registry.register::<u128>();
63+
registry.register::<usize>();
64+
registry.register::<i8>();
65+
registry.register::<i16>();
66+
registry.register::<i32>();
67+
registry.register::<i64>();
68+
registry.register::<i128>();
69+
registry.register::<isize>();
70+
registry.register::<f32>();
71+
registry.register::<f64>();
72+
registry
73+
}
74+
3975
/// Registers the type `T`.
4076
pub fn register<T>(&mut self)
4177
where

0 commit comments

Comments
 (0)