From 97a21f7428f037f8880fdf21400f3ba26b1bb7d2 Mon Sep 17 00:00:00 2001 From: ebola Date: Tue, 23 Jan 2024 11:36:15 -0500 Subject: [PATCH 1/7] Remove TypeUuid --- .../bevy_reflect_derive/src/type_uuid.rs | 108 ------------ crates/bevy_reflect/src/type_uuid.rs | 157 ------------------ crates/bevy_reflect/src/type_uuid_impl.rs | 84 ---------- .../tests/type_uuid_derive.rs | 5 - .../type_uuid_derive/derive_type_uuid.rs | 17 -- .../type_uuid_derive/derive_type_uuid.stderr | 19 --- 6 files changed, 390 deletions(-) delete mode 100644 crates/bevy_reflect/bevy_reflect_derive/src/type_uuid.rs delete mode 100644 crates/bevy_reflect/src/type_uuid.rs delete mode 100644 crates/bevy_reflect/src/type_uuid_impl.rs delete mode 100644 crates/bevy_reflect_compile_fail_tests/tests/type_uuid_derive.rs delete mode 100644 crates/bevy_reflect_compile_fail_tests/tests/type_uuid_derive/derive_type_uuid.rs delete mode 100644 crates/bevy_reflect_compile_fail_tests/tests/type_uuid_derive/derive_type_uuid.stderr diff --git a/crates/bevy_reflect/bevy_reflect_derive/src/type_uuid.rs b/crates/bevy_reflect/bevy_reflect_derive/src/type_uuid.rs deleted file mode 100644 index 8affed7ca7c7a..0000000000000 --- a/crates/bevy_reflect/bevy_reflect_derive/src/type_uuid.rs +++ /dev/null @@ -1,108 +0,0 @@ -use bevy_macro_utils::BevyManifest; -use proc_macro2::{Span, TokenStream}; -use quote::quote; -use syn::parse::{Parse, ParseStream}; -use syn::token::Comma; -use syn::{DeriveInput, Expr, ExprLit, Generics, Ident, Lit, LitInt, LitStr, Meta}; -use uuid::Uuid; - -pub(crate) fn type_uuid_derive(input: DeriveInput) -> syn::Result { - let mut uuid = None; - - #[allow(clippy::manual_let_else)] - for attribute in input - .attrs - .iter() - .filter(|attr| attr.path().is_ident("uuid")) - { - let Meta::NameValue(ref name_value) = attribute.meta else { - continue; - }; - - let uuid_str = match &name_value.value { - Expr::Lit(ExprLit{lit: Lit::Str(lit_str), ..}) => lit_str, - _ => return Err(syn::Error::new_spanned(attribute, "`uuid` attribute must take the form `#[uuid = \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\"]`.")), - }; - - uuid = - Some(Uuid::parse_str(&uuid_str.value()).map_err(|err| { - syn::Error::new_spanned(uuid_str, format!("Invalid UUID: {err}")) - })?); - } - - let uuid = uuid.ok_or_else(|| { - syn::Error::new( - Span::call_site(), - "No `#[uuid = \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\"]` attribute found.", - ) - })?; - - Ok(gen_impl_type_uuid(TypeUuidDef { - type_ident: input.ident, - generics: input.generics, - uuid, - })) -} - -/// Generates an implementation of `TypeUuid`. If there any generics, the `TYPE_UUID` will be a composite of the generic types' `TYPE_UUID`. -pub(crate) fn gen_impl_type_uuid(def: TypeUuidDef) -> TokenStream { - let uuid = def.uuid; - let mut generics = def.generics; - let ty = def.type_ident; - - let bevy_reflect_path = BevyManifest::default().get_path("bevy_reflect"); - - generics.type_params_mut().for_each(|param| { - param - .bounds - .push(syn::parse_quote!(#bevy_reflect_path::TypeUuid)); - }); - - let bytes = uuid - .as_bytes() - .iter() - .map(|byte| format!("{byte:#X}")) - .map(|byte_str| syn::parse_str::(&byte_str).unwrap()); - - let (impl_generics, type_generics, where_clause) = generics.split_for_impl(); - - let base = quote! { #bevy_reflect_path::Uuid::from_bytes([#( #bytes ),*]) }; - let type_uuid = generics.type_params().enumerate().fold(base, |acc, (index, param)| { - let ident = ¶m.ident; - let param_uuid = quote!( - #bevy_reflect_path::Uuid::from_u128(<#ident as #bevy_reflect_path::TypeUuid>::TYPE_UUID.as_u128().wrapping_add(#index as u128)) - ); - quote! { - #bevy_reflect_path::__macro_exports::generate_composite_uuid(#acc, #param_uuid) - } - }); - - quote! { - impl #impl_generics #bevy_reflect_path::TypeUuid for #ty #type_generics #where_clause { - const TYPE_UUID: #bevy_reflect_path::Uuid = #type_uuid; - } - } -} - -/// A struct containing the data required to generate an implementation of `TypeUuid`. This can be generated by either [`impl_type_uuid!`][crate::impl_type_uuid!] or [`type_uuid_derive`]. -pub(crate) struct TypeUuidDef { - pub type_ident: Ident, - pub generics: Generics, - pub uuid: Uuid, -} - -impl Parse for TypeUuidDef { - fn parse(input: ParseStream) -> syn::Result { - let type_ident = input.parse::()?; - let generics = input.parse::()?; - input.parse::()?; - let uuid = input.parse::()?.value(); - let uuid = Uuid::parse_str(&uuid).map_err(|err| input.error(format!("{err}")))?; - - Ok(Self { - type_ident, - generics, - uuid, - }) - } -} diff --git a/crates/bevy_reflect/src/type_uuid.rs b/crates/bevy_reflect/src/type_uuid.rs deleted file mode 100644 index 7c02f998cd373..0000000000000 --- a/crates/bevy_reflect/src/type_uuid.rs +++ /dev/null @@ -1,157 +0,0 @@ -pub use bevy_reflect_derive::TypeUuid; -pub use bevy_utils::uuid::Uuid; - -/// A trait for types with a statically associated UUID. -pub trait TypeUuid { - const TYPE_UUID: Uuid; -} - -/// A trait for types with an associated UUID. -pub trait TypeUuidDynamic { - fn type_uuid(&self) -> Uuid; - fn type_name(&self) -> &'static str; -} - -impl TypeUuidDynamic for T -where - T: TypeUuid, -{ - /// Returns the UUID associated with this value's type. - fn type_uuid(&self) -> Uuid { - Self::TYPE_UUID - } - - /// Returns the [type name] of this value's type. - /// - /// [type name]: std::any::type_name - fn type_name(&self) -> &'static str { - std::any::type_name::() - } -} - -#[cfg(test)] -mod test { - use super::*; - use crate as bevy_reflect; - use bevy_reflect_derive::TypeUuid; - use std::marker::PhantomData; - - #[derive(TypeUuid)] - #[uuid = "af6466c2-a9f4-11eb-bcbc-0242ac130002"] - struct TestDeriveStruct - where - T: Clone, - { - _value: T, - } - - fn test_impl_type_uuid(_: &impl TypeUuid) {} - - #[test] - fn test_generic_type_uuid_derive() { - #[derive(TypeUuid, Clone)] - #[uuid = "ebb16cc9-4d5a-453c-aa8c-c72bd8ec83a2"] - struct T; - - let test_struct = TestDeriveStruct { _value: T }; - test_impl_type_uuid(&test_struct); - } - - #[test] - fn test_generic_type_unique_uuid() { - #[derive(TypeUuid, Clone)] - #[uuid = "49951b1c-4811-45e7-acc6-3119249fbd8f"] - struct A; - - #[derive(TypeUuid, Clone)] - #[uuid = "4882b8f5-5556-4cee-bea6-a2e5991997b7"] - struct B; - - let uuid_a = TestDeriveStruct::::TYPE_UUID; - let uuid_b = TestDeriveStruct::::TYPE_UUID; - - assert_ne!(uuid_a, uuid_b); - assert_ne!(uuid_a, A::TYPE_UUID); - assert_ne!(uuid_b, B::TYPE_UUID); - } - - #[test] - fn test_inverted_generic_type_unique_uuid() { - #[derive(TypeUuid, Clone)] - #[uuid = "49951b1c-4811-45e7-acc6-3119249fbd8f"] - struct Inner; - - #[derive(TypeUuid, Clone)] - #[uuid = "23ebc0c3-ef69-4ea0-8c2a-dca1b4e27c0d"] - struct TestDeriveStructA - where - T: Clone, - { - _phantom: PhantomData, - } - - #[derive(TypeUuid, Clone)] - #[uuid = "a82f9936-70cb-482a-bd3d-cb99d87de55f"] - struct TestDeriveStructB - where - T: Clone, - { - _phantom: PhantomData, - } - - let uuid_ab = TestDeriveStructA::>::TYPE_UUID; - let uuid_ba = TestDeriveStructB::>::TYPE_UUID; - - assert_ne!(uuid_ab, uuid_ba); - assert_ne!(uuid_ab, TestDeriveStructA::::TYPE_UUID); - assert_ne!(uuid_ba, TestDeriveStructB::::TYPE_UUID); - } - - #[test] - fn test_generic_type_uuid_same_for_eq_param() { - #[derive(TypeUuid, Clone)] - #[uuid = "49951b1c-4811-45e7-acc6-3119249fbd8f"] - struct A; - - #[derive(TypeUuid, Clone)] - #[uuid = "49951b1c-4811-45e7-acc6-3119249fbd8f"] - struct BButSameAsA; - - let uuid_a = TestDeriveStruct::::TYPE_UUID; - let uuid_b = TestDeriveStruct::::TYPE_UUID; - - assert_eq!(uuid_a, uuid_b); - } - - #[test] - fn test_multiple_generic_uuid() { - #[derive(TypeUuid)] - #[uuid = "35c8a7d3-d4b3-4bd7-b847-1118dc78092f"] - struct TestGeneric { - _value_a: A, - _value_b: B, - } - assert_ne!( - TestGeneric::::TYPE_UUID, - TestGeneric::::TYPE_UUID - ); - } - - #[test] - fn test_primitive_generic_uuid() { - test_impl_type_uuid(&true); - test_impl_type_uuid(&Some(true)); - test_impl_type_uuid(&TestDeriveStruct:: { _value: true }); - - assert_ne!(Option::::TYPE_UUID, Option::::TYPE_UUID); - - assert_ne!(<[bool; 0]>::TYPE_UUID, <[bool; 1]>::TYPE_UUID); - assert_ne!(<[bool; 0]>::TYPE_UUID, <[f32; 0]>::TYPE_UUID); - - assert_ne!( - <(bool, bool)>::TYPE_UUID, - <(bool, bool, bool, bool)>::TYPE_UUID - ); - assert_ne!(<(bool, f32)>::TYPE_UUID, <(f32, bool)>::TYPE_UUID); - } -} diff --git a/crates/bevy_reflect/src/type_uuid_impl.rs b/crates/bevy_reflect/src/type_uuid_impl.rs deleted file mode 100644 index d7f772438631c..0000000000000 --- a/crates/bevy_reflect/src/type_uuid_impl.rs +++ /dev/null @@ -1,84 +0,0 @@ -use crate::TypeUuid; -use crate::{self as bevy_reflect, __macro_exports::generate_composite_uuid}; -use bevy_reflect_derive::impl_type_uuid; -use bevy_utils::{all_tuples, Duration, HashMap, HashSet, Instant, Uuid}; - -#[cfg(feature = "smallvec")] -use bevy_utils::{smallvec, smallvec::SmallVec}; - -#[cfg(any(unix, windows))] -use std::ffi::OsString; -use std::{ - num::{ - NonZeroI128, NonZeroI16, NonZeroI32, NonZeroI64, NonZeroI8, NonZeroIsize, NonZeroU128, - NonZeroU16, NonZeroU32, NonZeroU64, NonZeroU8, NonZeroUsize, Saturating, Wrapping, - }, - ops::{RangeFrom, RangeFull, RangeInclusive, RangeTo, RangeToInclusive}, - path::PathBuf, -}; -impl TypeUuid for [T; N] { - const TYPE_UUID: Uuid = generate_composite_uuid( - Uuid::from_u128(0x18d33c78e63c47b9bbf8f095008ab693), - generate_composite_uuid(Uuid::from_u128(N as u128), T::TYPE_UUID), - ); -} -impl_type_uuid!(bool, "eb1ad0ee2dff473285bc54ebbdef682c"); -impl_type_uuid!(char, "45a4710278ba48f8b31f0d72ff7f9d46"); -impl_type_uuid!(u8, "fdf1a88a3e0543ca9f51ad5978ca519f"); -impl_type_uuid!(u16, "ddeb93f791074860aaac1540de254edc"); -impl_type_uuid!(u32, "fc565ea2367f405591e1c55f91cb60bd"); -impl_type_uuid!(u64, "6c74b6a983eb44b096a9169baa6af0a1"); -impl_type_uuid!(u128, "f837371a4f534b7381ed776d5056d0c1"); -impl_type_uuid!(usize, "0129e1d8cff041f9b23aa99c6e1006b8"); -impl_type_uuid!(i8, "af7a5411661e43b0b1631ea43a825fd2"); -impl_type_uuid!(i16, "68592d5de5be4a608603c6988edfdf9c"); -impl_type_uuid!(i32, "439ff07f96c94aa5a86352ded71e4730"); -impl_type_uuid!(i64, "7f9534793ad24ab2b9f05d8254f4204a"); -impl_type_uuid!(i128, "6e5009be5845460daf814e052cc9fcf0"); -impl_type_uuid!(isize, "d3d52630da45497faf86859051c79e7d"); -impl_type_uuid!(f32, "006607124a8148e1910c86f0c18c9015"); -impl_type_uuid!(f64, "a5bc32f5632b478c92a0939b821fff80"); -impl_type_uuid!(Result, "d5960af2e8a743dfb7427dd59b70df95"); -impl_type_uuid!(String, "c9f90d31b52d4bcd8b5c1d8b6fc1bcba"); -impl_type_uuid!(PathBuf, "aa79933abd1743698583a3acad3b8989"); -impl_type_uuid!(Vec, "ab98f5408b974475b643662247fb3886"); -impl_type_uuid!(HashMap,"f37bfad9ca8c4f6ea7448f1c39e05f98"); -impl_type_uuid!(Option, "8d5ba9a9031347078955fba01ff439f0"); -#[cfg(feature = "smallvec")] -impl_type_uuid!( - SmallVec, - "26fd5c1bed7144fbb8d1546c02ba255a" -); -impl_type_uuid!(HashSet, "5ebd2379ece44ef2b1478262962617a3"); -impl_type_uuid!(RangeInclusive, "79613b729ca9490881c7f47b24b22b60"); -impl_type_uuid!(RangeFrom, "1bd8c975f122486c9ed443e277964642"); -impl_type_uuid!(RangeTo, "7d938903749a4d198f496cb354929b9b"); -impl_type_uuid!(RangeToInclusive, "2fec56936206462fa5f35c99a62c5ed1"); -impl_type_uuid!(RangeFull, "227af17f65db448782a2f6980ceae25d"); -impl_type_uuid!(Duration, "cee5978c60f74a53b6848cb9c46a6e1c"); -impl_type_uuid!(Instant, "9b0194a1d31c44c1afd2f6fd80ab8dfb"); -impl_type_uuid!(NonZeroI128, "915a1e7fcaeb433982cebf58c2ac20e7"); -impl_type_uuid!(NonZeroU128, "286de521146042cda31dfbef8f3f6cdc"); -impl_type_uuid!(NonZeroIsize, "9318740a9fd14603b709b8fbc6fd2812"); -impl_type_uuid!(NonZeroUsize, "a26533ed16324189878263d5e7a294ce"); -impl_type_uuid!(NonZeroI64, "1aa38623127a42419cca4992e6fc3152"); -impl_type_uuid!(NonZeroU64, "46be65e669a2477d942e2ec39d0d2af7"); -impl_type_uuid!(NonZeroU32, "cf53a46d9efe4022967160cb61762c91"); -impl_type_uuid!(NonZeroI32, "a69fbd659bef4322b88b15ff3263f530"); -impl_type_uuid!(NonZeroI16, "8744c2ec8a10491fae40f8bafa58b30d"); -impl_type_uuid!(NonZeroU16, "c7b8b60780a6495bab4fda2bdfedabcc"); -impl_type_uuid!(NonZeroU8, "635ee104ef7947fb9d7f79dad47255a3"); -impl_type_uuid!(NonZeroI8, "2d3f1570b7f64779826d44da5c7ba069"); -impl_type_uuid!(Saturating, "e9d7c5d5b9e94c9c9c8c8c0f5f3c5c5f"); -impl_type_uuid!(Wrapping, "d5b9e94c9c9c8c8c0f5f3c5c5fe9d7c5"); -#[cfg(any(unix, windows))] -impl_type_uuid!(OsString, "809e7b3c1ea240979ecd832f91eb842a"); -macro_rules! impl_tuple { - ( $($name: ident),* ) => { - const _: () = { - type Tuple< $($name),* > = ( $($name,)* ); - impl_type_uuid!(Tuple< $($name),* > , "35c8a7d3d4b34bd7b8471118dc78092f"); - }; - }; -} -all_tuples!(impl_tuple, 0, 12, A); diff --git a/crates/bevy_reflect_compile_fail_tests/tests/type_uuid_derive.rs b/crates/bevy_reflect_compile_fail_tests/tests/type_uuid_derive.rs deleted file mode 100644 index fe352d8d00fcf..0000000000000 --- a/crates/bevy_reflect_compile_fail_tests/tests/type_uuid_derive.rs +++ /dev/null @@ -1,5 +0,0 @@ -#[test] -fn test() { - let t = trybuild::TestCases::new(); - t.compile_fail("tests/type_uuid_derive/*.rs"); -} diff --git a/crates/bevy_reflect_compile_fail_tests/tests/type_uuid_derive/derive_type_uuid.rs b/crates/bevy_reflect_compile_fail_tests/tests/type_uuid_derive/derive_type_uuid.rs deleted file mode 100644 index da4ce924b757a..0000000000000 --- a/crates/bevy_reflect_compile_fail_tests/tests/type_uuid_derive/derive_type_uuid.rs +++ /dev/null @@ -1,17 +0,0 @@ -use bevy_reflect::TypeUuid; - -fn main() {} - -// Missing #[uuid] attribute -#[derive(TypeUuid)] -struct A; - -// Malformed attribute -#[derive(TypeUuid)] -#[uuid = 42] -struct B; - -// UUID parse fail -#[derive(TypeUuid)] -#[uuid = "000"] -struct C; diff --git a/crates/bevy_reflect_compile_fail_tests/tests/type_uuid_derive/derive_type_uuid.stderr b/crates/bevy_reflect_compile_fail_tests/tests/type_uuid_derive/derive_type_uuid.stderr deleted file mode 100644 index 95f4834eab081..0000000000000 --- a/crates/bevy_reflect_compile_fail_tests/tests/type_uuid_derive/derive_type_uuid.stderr +++ /dev/null @@ -1,19 +0,0 @@ -error: No `#[uuid = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"]` attribute found. - --> tests/type_uuid_derive/derive_type_uuid.rs:6:10 - | -6 | #[derive(TypeUuid)] - | ^^^^^^^^ - | - = note: this error originates in the derive macro `TypeUuid` (in Nightly builds, run with -Z macro-backtrace for more info) - -error: `uuid` attribute must take the form `#[uuid = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"]`. - --> tests/type_uuid_derive/derive_type_uuid.rs:11:1 - | -11 | #[uuid = 42] - | ^^^^^^^^^^^^ - -error: Invalid UUID: invalid length: expected length 32 for simple format, found 3 - --> tests/type_uuid_derive/derive_type_uuid.rs:16:10 - | -16 | #[uuid = "000"] - | ^^^^^ From 19986e409542ae408215bbbc49ad193a813ae85c Mon Sep 17 00:00:00 2001 From: ebola Date: Tue, 23 Jan 2024 11:45:09 -0500 Subject: [PATCH 2/7] Remove references to TypeUuid --- crates/bevy_pbr/src/material.rs | 2 +- crates/bevy_pbr/src/wireframe.rs | 4 +-- .../bevy_reflect_derive/src/lib.rs | 31 ++----------------- examples/audio/decodable.rs | 1 - 4 files changed, 5 insertions(+), 33 deletions(-) diff --git a/crates/bevy_pbr/src/material.rs b/crates/bevy_pbr/src/material.rs index c002296ca0b4c..8e2b3bd71d91b 100644 --- a/crates/bevy_pbr/src/material.rs +++ b/crates/bevy_pbr/src/material.rs @@ -48,7 +48,7 @@ use std::marker::PhantomData; /// ``` /// # use bevy_pbr::{Material, MaterialMeshBundle}; /// # use bevy_ecs::prelude::*; -/// # use bevy_reflect::{TypeUuid, TypePath}; +/// # use bevy_reflect::TypePath; /// # use bevy_render::{render_resource::{AsBindGroup, ShaderRef}, texture::Image, color::Color}; /// # use bevy_asset::{Handle, AssetServer, Assets, Asset}; /// diff --git a/crates/bevy_pbr/src/wireframe.rs b/crates/bevy_pbr/src/wireframe.rs index e779a1668d2f9..9afa3f6132dda 100644 --- a/crates/bevy_pbr/src/wireframe.rs +++ b/crates/bevy_pbr/src/wireframe.rs @@ -2,7 +2,7 @@ use crate::{Material, MaterialPipeline, MaterialPipelineKey, MaterialPlugin}; use bevy_app::{Plugin, Startup, Update}; use bevy_asset::{load_internal_asset, Asset, Assets, Handle}; use bevy_ecs::prelude::*; -use bevy_reflect::{std_traits::ReflectDefault, Reflect, TypePath, TypeUuid}; +use bevy_reflect::{std_traits::ReflectDefault, Reflect, TypePath}; use bevy_render::{ color::Color, extract_resource::ExtractResource, @@ -194,7 +194,7 @@ fn apply_global_wireframe_material( } } -#[derive(Default, AsBindGroup, TypeUuid, TypePath, Debug, Clone, Asset)] +#[derive(Default, AsBindGroup, TypePath, Debug, Clone, Asset)] #[uuid = "9e694f70-9963-4418-8bc1-3474c66b13b8"] pub struct WireframeMaterial { #[uniform(0)] diff --git a/crates/bevy_reflect/bevy_reflect_derive/src/lib.rs b/crates/bevy_reflect/bevy_reflect_derive/src/lib.rs index d0d59f3655a15..9bdedfd341b52 100644 --- a/crates/bevy_reflect/bevy_reflect_derive/src/lib.rs +++ b/crates/bevy_reflect/bevy_reflect_derive/src/lib.rs @@ -5,11 +5,11 @@ //! such as `Struct`, `GetTypeRegistration`, and more— all with a single derive! //! //! Some other noteworthy exports include the derive macros for [`FromReflect`] and -//! [`TypeUuid`], as well as the [`reflect_trait`] attribute macro. +//! [`TypePath`], as well as the [`reflect_trait`] attribute macro. //! //! [`Reflect`]: crate::derive_reflect //! [`FromReflect`]: crate::derive_from_reflect -//! [`TypeUuid`]: crate::derive_type_uuid +//! [`TypePath`]: crate::derive_type_path //! [`reflect_trait`]: macro@reflect_trait extern crate proc_macro; @@ -291,20 +291,6 @@ pub fn derive_type_path(input: TokenStream) -> TokenStream { }) } -// From https://github.com/randomPoison/type-uuid -#[proc_macro_derive(TypeUuid, attributes(uuid))] -pub fn derive_type_uuid(input: TokenStream) -> TokenStream { - let input = parse_macro_input!(input as DeriveInput); - let uuid_impl = - type_uuid::type_uuid_derive(input).unwrap_or_else(syn::Error::into_compile_error); - - TokenStream::from(quote! { - const _: () = { - #uuid_impl - }; - }) -} - /// A macro that automatically generates type data for traits, which their implementors can then register. /// /// The output of this macro is a struct that takes reflected instances of the implementor's type @@ -616,16 +602,3 @@ pub fn impl_type_path(input: TokenStream) -> TokenStream { }; }) } - -/// Derives `TypeUuid` for the given type. This is used internally to implement `TypeUuid` on foreign types, such as those in the std. This macro should be used in the format of `<[Generic Params]> [Type (Path)], [Uuid (String Literal)]`. -#[proc_macro] -pub fn impl_type_uuid(input: TokenStream) -> TokenStream { - let def = parse_macro_input!(input as type_uuid::TypeUuidDef); - let uuid_impl = type_uuid::gen_impl_type_uuid(def); - - TokenStream::from(quote! { - const _: () = { - #uuid_impl - }; - }) -} diff --git a/examples/audio/decodable.rs b/examples/audio/decodable.rs index 97028fabb4d85..6edd43ae861a4 100644 --- a/examples/audio/decodable.rs +++ b/examples/audio/decodable.rs @@ -8,7 +8,6 @@ use bevy::utils::Duration; // This struct usually contains the data for the audio being played. // This is where data read from an audio file would be stored, for example. -// Implementing `TypeUuid` will automatically implement `Asset`. // This allows the type to be registered as an asset. #[derive(Asset, TypePath)] struct SineAudio { From 5a6acb4790a191aa9105063fe4dd2185d9bf85ce Mon Sep 17 00:00:00 2001 From: ebola Date: Tue, 23 Jan 2024 11:55:49 -0500 Subject: [PATCH 3/7] Remove more references to TypeUuid --- crates/bevy_reflect/bevy_reflect_derive/src/lib.rs | 1 - crates/bevy_reflect/src/lib.rs | 9 +++------ 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/crates/bevy_reflect/bevy_reflect_derive/src/lib.rs b/crates/bevy_reflect/bevy_reflect_derive/src/lib.rs index 9bdedfd341b52..79503785e176f 100644 --- a/crates/bevy_reflect/bevy_reflect_derive/src/lib.rs +++ b/crates/bevy_reflect/bevy_reflect_derive/src/lib.rs @@ -27,7 +27,6 @@ mod registration; mod serialization; mod trait_reflection; mod type_path; -mod type_uuid; mod utility; use crate::derive_data::{ReflectDerive, ReflectMeta, ReflectStruct}; diff --git a/crates/bevy_reflect/src/lib.rs b/crates/bevy_reflect/src/lib.rs index 231ab7d0e0c58..6a4f04f11aeac 100644 --- a/crates/bevy_reflect/src/lib.rs +++ b/crates/bevy_reflect/src/lib.rs @@ -478,8 +478,6 @@ mod tuple_struct; mod type_info; mod type_path; mod type_registry; -mod type_uuid; -mod type_uuid_impl; mod impls { #[cfg(feature = "glam")] mod glam; @@ -523,7 +521,6 @@ pub use tuple_struct::*; pub use type_info::*; pub use type_path::*; pub use type_registry::*; -pub use type_uuid::*; pub use bevy_reflect_derive::*; pub use erased_serde; @@ -538,14 +535,14 @@ pub mod __macro_exports { #[cfg(test)] #[allow(clippy::disallowed_types, clippy::approx_constant)] mod tests { - #[cfg(feature = "glam")] - use ::glam::{quat, vec3, Quat, Vec3}; - use ::serde::{de::DeserializeSeed, Deserialize, Serialize}; use bevy_utils::HashMap; + #[cfg(feature = "glam")] + use glam::{quat, vec3, Quat, Vec3}; use ron::{ ser::{to_string_pretty, PrettyConfig}, Deserializer, }; + use serde::{de::DeserializeSeed, Deserialize, Serialize}; use std::{ any::TypeId, borrow::Cow, From efed7f59729826d6340ba2a97166d740cbb784a8 Mon Sep 17 00:00:00 2001 From: ebola Date: Tue, 23 Jan 2024 12:38:14 -0500 Subject: [PATCH 4/7] Remove undeeded uuid annotation, update bevy_asset to pull Uuid from bevy_utils --- crates/bevy_asset/src/assets.rs | 4 ++-- crates/bevy_asset/src/handle.rs | 4 ++-- crates/bevy_asset/src/id.rs | 4 +++- crates/bevy_pbr/src/wireframe.rs | 1 - 4 files changed, 7 insertions(+), 6 deletions(-) diff --git a/crates/bevy_asset/src/assets.rs b/crates/bevy_asset/src/assets.rs index cc1ee6bf097a5..3248606cc9d7b 100644 --- a/crates/bevy_asset/src/assets.rs +++ b/crates/bevy_asset/src/assets.rs @@ -6,8 +6,8 @@ use bevy_ecs::{ prelude::EventWriter, system::{Res, ResMut, Resource}, }; -use bevy_reflect::{Reflect, TypePath, Uuid}; -use bevy_utils::HashMap; +use bevy_reflect::{Reflect, TypePath}; +use bevy_utils::{HashMap, Uuid}; use crossbeam_channel::{Receiver, Sender}; use serde::{Deserialize, Serialize}; use std::{ diff --git a/crates/bevy_asset/src/handle.rs b/crates/bevy_asset/src/handle.rs index 1f9b8fb6084df..d006d85ed6f78 100644 --- a/crates/bevy_asset/src/handle.rs +++ b/crates/bevy_asset/src/handle.rs @@ -3,8 +3,8 @@ use crate::{ UntypedAssetId, }; use bevy_ecs::prelude::*; -use bevy_reflect::{Reflect, TypePath, Uuid}; -use bevy_utils::get_short_name; +use bevy_reflect::{Reflect, TypePath}; +use bevy_utils::{get_short_name, Uuid}; use crossbeam_channel::{Receiver, Sender}; use std::{ any::TypeId, diff --git a/crates/bevy_asset/src/id.rs b/crates/bevy_asset/src/id.rs index db641d4fb2608..1efc61bacc1af 100644 --- a/crates/bevy_asset/src/id.rs +++ b/crates/bevy_asset/src/id.rs @@ -1,5 +1,7 @@ use crate::{Asset, AssetIndex}; -use bevy_reflect::{Reflect, Uuid}; +use bevy_reflect::Reflect; +use bevy_utils::Uuid; + use std::{ any::TypeId, fmt::{Debug, Display}, diff --git a/crates/bevy_pbr/src/wireframe.rs b/crates/bevy_pbr/src/wireframe.rs index 9afa3f6132dda..c381d424e9331 100644 --- a/crates/bevy_pbr/src/wireframe.rs +++ b/crates/bevy_pbr/src/wireframe.rs @@ -195,7 +195,6 @@ fn apply_global_wireframe_material( } #[derive(Default, AsBindGroup, TypePath, Debug, Clone, Asset)] -#[uuid = "9e694f70-9963-4418-8bc1-3474c66b13b8"] pub struct WireframeMaterial { #[uniform(0)] pub color: Color, From 6a46c4e49e3a93de382c9f26270245c6f73a176e Mon Sep 17 00:00:00 2001 From: ebola Date: Tue, 23 Jan 2024 14:58:54 -0500 Subject: [PATCH 5/7] Fix tests --- crates/bevy_reflect/src/lib.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/crates/bevy_reflect/src/lib.rs b/crates/bevy_reflect/src/lib.rs index 6a4f04f11aeac..b2846884672cd 100644 --- a/crates/bevy_reflect/src/lib.rs +++ b/crates/bevy_reflect/src/lib.rs @@ -542,7 +542,8 @@ mod tests { ser::{to_string_pretty, PrettyConfig}, Deserializer, }; - use serde::{de::DeserializeSeed, Deserialize, Serialize}; + #[rustfmt::skip] + use ::serde::{de::DeserializeSeed, Deserialize, Serialize}; use std::{ any::TypeId, borrow::Cow, From 8a321a36f29f123327cddc07498a49b5f1552e67 Mon Sep 17 00:00:00 2001 From: ebola Date: Tue, 23 Jan 2024 15:19:49 -0500 Subject: [PATCH 6/7] Hopefully resolve test failures in CI --- crates/bevy_reflect/Cargo.toml | 1 + crates/bevy_reflect/src/lib.rs | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/crates/bevy_reflect/Cargo.toml b/crates/bevy_reflect/Cargo.toml index 4202293037d1b..8ba893218328c 100644 --- a/crates/bevy_reflect/Cargo.toml +++ b/crates/bevy_reflect/Cargo.toml @@ -36,6 +36,7 @@ glam = { version = "0.25", features = ["serde"], optional = true } smol_str = { version = "0.2.0", optional = true } [dev-dependencies] +glam = { version = "0.25", features = ["serde"] } ron = "0.8.0" rmp-serde = "1.1" bincode = "1.3" diff --git a/crates/bevy_reflect/src/lib.rs b/crates/bevy_reflect/src/lib.rs index b2846884672cd..0406142dcd51f 100644 --- a/crates/bevy_reflect/src/lib.rs +++ b/crates/bevy_reflect/src/lib.rs @@ -536,8 +536,8 @@ pub mod __macro_exports { #[allow(clippy::disallowed_types, clippy::approx_constant)] mod tests { use bevy_utils::HashMap; - #[cfg(feature = "glam")] - use glam::{quat, vec3, Quat, Vec3}; + #[rustfmt::skip] + use ::glam::{quat, vec3, Quat, Vec3}; use ron::{ ser::{to_string_pretty, PrettyConfig}, Deserializer, From 2043d1031b46d6678d0eeaba1c6d104270cd84ba Mon Sep 17 00:00:00 2001 From: ebola Date: Wed, 24 Jan 2024 10:40:11 -0500 Subject: [PATCH 7/7] Add comment explaining why rustfmt=skip is used --- crates/bevy_reflect/src/lib.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/crates/bevy_reflect/src/lib.rs b/crates/bevy_reflect/src/lib.rs index 0406142dcd51f..b415df7d69744 100644 --- a/crates/bevy_reflect/src/lib.rs +++ b/crates/bevy_reflect/src/lib.rs @@ -536,13 +536,13 @@ pub mod __macro_exports { #[allow(clippy::disallowed_types, clippy::approx_constant)] mod tests { use bevy_utils::HashMap; - #[rustfmt::skip] + #[rustfmt::skip] // This is used to avoid import conflicts with `super` use ::glam::{quat, vec3, Quat, Vec3}; use ron::{ ser::{to_string_pretty, PrettyConfig}, Deserializer, }; - #[rustfmt::skip] + #[rustfmt::skip] // This is used to avoid import conflicts with `super::` use ::serde::{de::DeserializeSeed, Deserialize, Serialize}; use std::{ any::TypeId,