From 3653f745bed74d56100ec78b23cef84658788d90 Mon Sep 17 00:00:00 2001 From: Soares Chen Date: Fri, 17 Oct 2025 19:41:00 +0000 Subject: [PATCH 1/8] Use DelegateComponent in consumer blanket implementation directly --- .../src/traits/can_use_component.rs | 6 +++--- crates/cgp-error/src/traits/can_raise_error.rs | 2 +- crates/cgp-error/src/traits/can_wrap_error.rs | 2 +- crates/cgp-error/src/traits/has_error_type.rs | 2 +- .../src/derive_component/consumer_impl.rs | 17 ++++++++++------- .../src/derive_component/derive.rs | 8 +++++++- .../cgp-macro-lib/src/derive_context/derive.rs | 10 +++++++--- crates/cgp-type/Cargo.toml | 2 +- crates/cgp-type/src/traits/has_type.rs | 2 +- 9 files changed, 32 insertions(+), 19 deletions(-) diff --git a/crates/cgp-component/src/traits/can_use_component.rs b/crates/cgp-component/src/traits/can_use_component.rs index 552f4314..d3162231 100644 --- a/crates/cgp-component/src/traits/can_use_component.rs +++ b/crates/cgp-component/src/traits/can_use_component.rs @@ -1,4 +1,4 @@ -use crate::{HasCgpProvider, IsProviderFor}; +use crate::{DelegateComponent, IsProviderFor}; /** This is a convenient type alias that is used in the same way as [`IsProviderFor`], @@ -17,7 +17,7 @@ pub trait CanUseComponent {} impl CanUseComponent for Context where - Context: HasCgpProvider, - Context::CgpProvider: IsProviderFor, + Context: DelegateComponent, + Context::Delegate: IsProviderFor, { } diff --git a/crates/cgp-error/src/traits/can_raise_error.rs b/crates/cgp-error/src/traits/can_raise_error.rs index 600e18fe..be617d30 100644 --- a/crates/cgp-error/src/traits/can_raise_error.rs +++ b/crates/cgp-error/src/traits/can_raise_error.rs @@ -1,4 +1,4 @@ -use cgp_component::{DelegateComponent, HasCgpProvider, IsProviderFor, UseContext, UseDelegate}; +use cgp_component::{DelegateComponent, IsProviderFor, UseContext, UseDelegate}; use cgp_macro::cgp_component; use crate::traits::has_error_type::HasErrorType; diff --git a/crates/cgp-error/src/traits/can_wrap_error.rs b/crates/cgp-error/src/traits/can_wrap_error.rs index 6853754f..7dfdf0de 100644 --- a/crates/cgp-error/src/traits/can_wrap_error.rs +++ b/crates/cgp-error/src/traits/can_wrap_error.rs @@ -1,4 +1,4 @@ -use cgp_component::{DelegateComponent, HasCgpProvider, IsProviderFor, UseContext, UseDelegate}; +use cgp_component::{DelegateComponent, IsProviderFor, UseContext, UseDelegate}; use cgp_macro::cgp_component; use crate::traits::HasErrorType; diff --git a/crates/cgp-error/src/traits/has_error_type.rs b/crates/cgp-error/src/traits/has_error_type.rs index 43f188a5..3a3da0ae 100644 --- a/crates/cgp-error/src/traits/has_error_type.rs +++ b/crates/cgp-error/src/traits/has_error_type.rs @@ -1,6 +1,6 @@ use core::fmt::Debug; -use cgp_component::{DelegateComponent, HasCgpProvider, IsProviderFor, UseContext, WithProvider}; +use cgp_component::{DelegateComponent, IsProviderFor, UseContext, WithProvider}; use cgp_macro::cgp_type; use cgp_type::{ProvideType, UseType}; diff --git a/crates/cgp-macro-lib/src/derive_component/consumer_impl.rs b/crates/cgp-macro-lib/src/derive_component/consumer_impl.rs index d8f700f9..cd6508d5 100644 --- a/crates/cgp-macro-lib/src/derive_component/consumer_impl.rs +++ b/crates/cgp-macro-lib/src/derive_component/consumer_impl.rs @@ -3,8 +3,9 @@ use alloc::vec::Vec; use proc_macro2::Span; use quote::{ToTokens, quote}; +use syn::punctuated::Punctuated; use syn::spanned::Spanned; -use syn::token::{Brace, Eq, For, Impl}; +use syn::token::{Brace, Comma, Eq, For, Impl}; use syn::{ Error, GenericParam, Generics, Ident, ImplItem, ImplItemConst, ItemImpl, ItemTrait, Path, TraitItem, TypeParamBound, Visibility, parse2, @@ -17,6 +18,8 @@ pub fn derive_consumer_impl( consumer_trait: &ItemTrait, provider_name: &Ident, context_type: &Ident, + component_name: &Ident, + component_params: &Punctuated, ) -> syn::Result { let consumer_name = &consumer_trait.ident; @@ -61,7 +64,7 @@ pub fn derive_consumer_impl( { let has_component_constraint: TypeParamBound = parse2(quote! { - HasCgpProvider + DelegateComponent< #component_name < #component_params > > })?; let provider_constraint: TypeParamBound = parse2(quote! { @@ -75,14 +78,14 @@ pub fn derive_consumer_impl( })?); where_clause.predicates.push(parse2(quote! { - #context_type :: CgpProvider : #provider_constraint + #context_type :: Delegate : #provider_constraint })?); } _ => { generics.where_clause = Some(parse2(quote! { where #context_type : #has_component_constraint, - #context_type :: CgpProvider : #provider_constraint + #context_type :: Delegate : #provider_constraint })?); } } @@ -98,7 +101,7 @@ pub fn derive_consumer_impl( TraitItem::Fn(trait_fn) => { let impl_fn = derive_delegated_fn_impl( &trait_fn.sig, - &parse2(quote!(#context_type :: CgpProvider))?, + &parse2(quote!(#context_type :: Delegate))?, )?; impl_items.push(ImplItem::Fn(impl_fn)); @@ -121,7 +124,7 @@ pub fn derive_consumer_impl( let impl_type = derive_delegate_type_impl( trait_type, parse2(quote!( - < #context_type :: CgpProvider as #provider_name < #provider_type_generics > > :: #type_name #type_generics + < #context_type :: Delegate as #provider_name < #provider_type_generics > > :: #type_name #type_generics ))?, ); @@ -132,7 +135,7 @@ pub fn derive_consumer_impl( let (_, type_generics, _) = trait_item_const.generics.split_for_impl(); let impl_expr = parse2(quote! { - < #context_type :: CgpProvider as #provider_name < #provider_type_generics > > :: #const_ident #type_generics + < #context_type :: Delegate as #provider_name < #provider_type_generics > > :: #const_ident #type_generics })?; let impl_item_const = ImplItemConst { diff --git a/crates/cgp-macro-lib/src/derive_component/derive.rs b/crates/cgp-macro-lib/src/derive_component/derive.rs index 7092468e..0189994b 100644 --- a/crates/cgp-macro-lib/src/derive_component/derive.rs +++ b/crates/cgp-macro-lib/src/derive_component/derive.rs @@ -31,7 +31,13 @@ pub fn derive_component_with_ast( context_type, )?; - let consumer_impl = derive_consumer_impl(&consumer_trait, provider_name, context_type)?; + let consumer_impl = derive_consumer_impl( + &consumer_trait, + provider_name, + context_type, + component_name, + component_params, + )?; let provider_impl = derive_provider_impl( context_type, diff --git a/crates/cgp-macro-lib/src/derive_context/derive.rs b/crates/cgp-macro-lib/src/derive_context/derive.rs index 59485b81..efd615ca 100644 --- a/crates/cgp-macro-lib/src/derive_context/derive.rs +++ b/crates/cgp-macro-lib/src/derive_context/derive.rs @@ -10,13 +10,17 @@ pub fn derive_has_components( ) -> syn::Result { let context_name = &context_struct.ident; - let (impl_generics, ty_generics, where_clause) = context_struct.generics.split_for_impl(); + let mut generics = context_struct.generics.clone(); + generics.params.insert(0, parse2(quote! { __Name__ })?); + + let (impl_generics, _, _) = generics.split_for_impl(); + let (_, ty_generics, where_clause) = context_struct.generics.split_for_impl(); parse2(quote! { - impl #impl_generics HasCgpProvider for #context_name #ty_generics + impl #impl_generics DelegateComponent<__Name__> for #context_name #ty_generics #where_clause { - type CgpProvider = #provider_name #provider_generics; + type Delegate = #provider_name #provider_generics; } }) } diff --git a/crates/cgp-type/Cargo.toml b/crates/cgp-type/Cargo.toml index 18d46834..048283df 100644 --- a/crates/cgp-type/Cargo.toml +++ b/crates/cgp-type/Cargo.toml @@ -13,4 +13,4 @@ description = """ [dependencies] cgp-component = { workspace = true } -cgp-macro = { workspace = true } +cgp-macro = { workspace = true } diff --git a/crates/cgp-type/src/traits/has_type.rs b/crates/cgp-type/src/traits/has_type.rs index 15aec00b..80d58a18 100644 --- a/crates/cgp-type/src/traits/has_type.rs +++ b/crates/cgp-type/src/traits/has_type.rs @@ -1,4 +1,4 @@ -use cgp_component::{DelegateComponent, HasCgpProvider, IsProviderFor, UseContext, UseDelegate}; +use cgp_component::{DelegateComponent, IsProviderFor, UseContext, UseDelegate}; use cgp_macro::cgp_component; #[cgp_component { From eca59243c9db955cb763de7e91aba5fee943bfde Mon Sep 17 00:00:00 2001 From: Soares Chen Date: Fri, 17 Oct 2025 19:41:59 +0000 Subject: [PATCH 2/8] Remove HasCgpProvider trait --- crates/cgp-component/src/lib.rs | 2 +- .../cgp-component/src/traits/has_provider.rs | 37 ------------------- crates/cgp-component/src/traits/mod.rs | 2 - crates/cgp-core/src/prelude.rs | 4 +- 4 files changed, 3 insertions(+), 42 deletions(-) delete mode 100644 crates/cgp-component/src/traits/has_provider.rs diff --git a/crates/cgp-component/src/lib.rs b/crates/cgp-component/src/lib.rs index 3e9c86a9..0785c757 100644 --- a/crates/cgp-component/src/lib.rs +++ b/crates/cgp-component/src/lib.rs @@ -8,5 +8,5 @@ mod traits; mod types; -pub use traits::{CanUseComponent, DelegateComponent, HasCgpProvider, IsProviderFor}; +pub use traits::{CanUseComponent, DelegateComponent, IsProviderFor}; pub use types::{UseContext, UseDelegate, UseFields, WithContext, WithProvider}; diff --git a/crates/cgp-component/src/traits/has_provider.rs b/crates/cgp-component/src/traits/has_provider.rs deleted file mode 100644 index d75d4414..00000000 --- a/crates/cgp-component/src/traits/has_provider.rs +++ /dev/null @@ -1,37 +0,0 @@ -/** - This trait is used by the blanket implementations of CGP consumer traits to - forward the implementation to the `CgpProvider` type, which impements the - corresponding provider trait. - - The `HasCgpProvider` trait is automatically implemented by `#[cgp_context]` - when defining a context type, together with the generated provider struct. - - Typically, the `CgpProvider` would contain provider implementation mapping - through `delegate_component!` macro to implement the corresponding provider - traits. However, it is also possible to implement context-specific provider - traits on the `CgpProvider` type directly. - - ## Example - - Given the following context definition: - - ```rust,ignore - #[cgp_context(MyContextComponents)] - pub struct MyContext { - ... - } - ``` - - The following would be generated: - - ```rust,ignore - pub struct MyContextComponents; - - impl HasCgpProvider for MyContext { - type CgpProvider = MyContextComponents; - } - ``` -*/ -pub trait HasCgpProvider { - type CgpProvider; -} diff --git a/crates/cgp-component/src/traits/mod.rs b/crates/cgp-component/src/traits/mod.rs index 16104b7e..1e5f1a04 100644 --- a/crates/cgp-component/src/traits/mod.rs +++ b/crates/cgp-component/src/traits/mod.rs @@ -1,9 +1,7 @@ mod can_use_component; mod delegate_component; -mod has_provider; mod is_provider; pub use can_use_component::*; pub use delegate_component::DelegateComponent; -pub use has_provider::HasCgpProvider; pub use is_provider::*; diff --git a/crates/cgp-core/src/prelude.rs b/crates/cgp-core/src/prelude.rs index e29326c2..c44714b9 100644 --- a/crates/cgp-core/src/prelude.rs +++ b/crates/cgp-core/src/prelude.rs @@ -2,8 +2,8 @@ pub use core::marker::PhantomData; pub use cgp_async_macro::async_trait; pub use cgp_component::{ - CanUseComponent, DelegateComponent, HasCgpProvider, IsProviderFor, UseContext, UseDelegate, - UseFields, WithContext, WithProvider, + CanUseComponent, DelegateComponent, IsProviderFor, UseContext, UseDelegate, UseFields, + WithContext, WithProvider, }; pub use cgp_error::{CanRaiseError, CanWrapError, HasErrorType}; pub use cgp_field::impls::{IsMut, IsNothing, IsPresent, IsRef, IsVoid, UseField}; From 6660b59140a837da0a9e0ecbaf54275d4135ab83 Mon Sep 17 00:00:00 2001 From: Soares Chen Date: Fri, 17 Oct 2025 19:43:42 +0000 Subject: [PATCH 3/8] Remove HasCgpProvider from comments --- crates/cgp-component/src/traits/can_use_component.rs | 4 ++-- crates/cgp-macro/src/lib.rs | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/crates/cgp-component/src/traits/can_use_component.rs b/crates/cgp-component/src/traits/can_use_component.rs index d3162231..15fdee9f 100644 --- a/crates/cgp-component/src/traits/can_use_component.rs +++ b/crates/cgp-component/src/traits/can_use_component.rs @@ -6,8 +6,8 @@ use crate::{DelegateComponent, IsProviderFor}; that implements the provider trait. The `CanUseComponent` trait is automatically implemented for any CGP `Context` type - that implements the `HasCgpProvider` trait, and when `Contex::CgpProvider` implements - `IsProviderFor`. + that implements the `DelegateComponent` trait, and when `Contex::Delegate` + implements `IsProviderFor`. This trait is used by `check_components!` to check whether a `Context` implements a given `Component` through its provider. When there are unsatisfied constraints, diff --git a/crates/cgp-macro/src/lib.rs b/crates/cgp-macro/src/lib.rs index ac08186e..cf0a1aee 100644 --- a/crates/cgp-macro/src/lib.rs +++ b/crates/cgp-macro/src/lib.rs @@ -721,7 +721,7 @@ pub fn cgp_type(attrs: TokenStream, body: TokenStream) -> TokenStream { the context provider would be named in the format `{struct_name}Components`. The macro generates a struct definition for the context provider, and implements - `HasCgpProvider` for the context struct to point to the context provider. + `DelegateComponent` for the context struct to point to the context provider. ## Example @@ -748,8 +748,8 @@ pub fn cgp_type(attrs: TokenStream, body: TokenStream) -> TokenStream { ```rust,ignore struct MyAppComponents; - impl HasCgpProvider for MyApp { - type CgpProvider = MyAppComponents; + impl DelegateComponent for MyApp { + type Delegate = MyAppComponents; } ``` From 4c731aa19e2982b7cc26c418e13e0dc6e42dbba9 Mon Sep 17 00:00:00 2001 From: Soares Chen Date: Fri, 17 Oct 2025 19:46:14 +0000 Subject: [PATCH 4/8] Move component tests to separate test unit --- crates/cgp-tests/src/tests/mod.rs | 3 --- crates/cgp-tests/tests/component.rs | 1 + .../tests => tests/component_tests}/cgp_component/constant.rs | 0 .../tests => tests/component_tests}/cgp_component/lifetime.rs | 0 .../{src/tests => tests/component_tests}/cgp_component/mod.rs | 0 .../tests => tests/component_tests}/cgp_component/sized.rs | 0 .../{src/tests => tests/component_tests}/cgp_impl/basic.rs | 0 .../{src/tests => tests/component_tests}/cgp_impl/mod.rs | 0 .../component_tests}/delegate_components/direct.rs | 0 .../component_tests}/delegate_components/general.rs | 0 .../tests => tests/component_tests}/delegate_components/mod.rs | 0 .../component_tests}/delegate_components/new_struct.rs | 0 crates/cgp-tests/tests/component_tests/mod.rs | 3 +++ 13 files changed, 4 insertions(+), 3 deletions(-) create mode 100644 crates/cgp-tests/tests/component.rs rename crates/cgp-tests/{src/tests => tests/component_tests}/cgp_component/constant.rs (100%) rename crates/cgp-tests/{src/tests => tests/component_tests}/cgp_component/lifetime.rs (100%) rename crates/cgp-tests/{src/tests => tests/component_tests}/cgp_component/mod.rs (100%) rename crates/cgp-tests/{src/tests => tests/component_tests}/cgp_component/sized.rs (100%) rename crates/cgp-tests/{src/tests => tests/component_tests}/cgp_impl/basic.rs (100%) rename crates/cgp-tests/{src/tests => tests/component_tests}/cgp_impl/mod.rs (100%) rename crates/cgp-tests/{src/tests => tests/component_tests}/delegate_components/direct.rs (100%) rename crates/cgp-tests/{src/tests => tests/component_tests}/delegate_components/general.rs (100%) rename crates/cgp-tests/{src/tests => tests/component_tests}/delegate_components/mod.rs (100%) rename crates/cgp-tests/{src/tests => tests/component_tests}/delegate_components/new_struct.rs (100%) create mode 100644 crates/cgp-tests/tests/component_tests/mod.rs diff --git a/crates/cgp-tests/src/tests/mod.rs b/crates/cgp-tests/src/tests/mod.rs index 7031c152..64afad3e 100644 --- a/crates/cgp-tests/src/tests/mod.rs +++ b/crates/cgp-tests/src/tests/mod.rs @@ -1,11 +1,8 @@ pub mod r#async; pub mod blanket_trait; -pub mod cgp_component; -pub mod cgp_impl; pub mod check_components; pub mod compose; pub mod delegate_and_check_components; -pub mod delegate_components; pub mod getter; pub mod has_field; pub mod has_fields; diff --git a/crates/cgp-tests/tests/component.rs b/crates/cgp-tests/tests/component.rs new file mode 100644 index 00000000..17dfc53d --- /dev/null +++ b/crates/cgp-tests/tests/component.rs @@ -0,0 +1 @@ +pub mod component_tests; diff --git a/crates/cgp-tests/src/tests/cgp_component/constant.rs b/crates/cgp-tests/tests/component_tests/cgp_component/constant.rs similarity index 100% rename from crates/cgp-tests/src/tests/cgp_component/constant.rs rename to crates/cgp-tests/tests/component_tests/cgp_component/constant.rs diff --git a/crates/cgp-tests/src/tests/cgp_component/lifetime.rs b/crates/cgp-tests/tests/component_tests/cgp_component/lifetime.rs similarity index 100% rename from crates/cgp-tests/src/tests/cgp_component/lifetime.rs rename to crates/cgp-tests/tests/component_tests/cgp_component/lifetime.rs diff --git a/crates/cgp-tests/src/tests/cgp_component/mod.rs b/crates/cgp-tests/tests/component_tests/cgp_component/mod.rs similarity index 100% rename from crates/cgp-tests/src/tests/cgp_component/mod.rs rename to crates/cgp-tests/tests/component_tests/cgp_component/mod.rs diff --git a/crates/cgp-tests/src/tests/cgp_component/sized.rs b/crates/cgp-tests/tests/component_tests/cgp_component/sized.rs similarity index 100% rename from crates/cgp-tests/src/tests/cgp_component/sized.rs rename to crates/cgp-tests/tests/component_tests/cgp_component/sized.rs diff --git a/crates/cgp-tests/src/tests/cgp_impl/basic.rs b/crates/cgp-tests/tests/component_tests/cgp_impl/basic.rs similarity index 100% rename from crates/cgp-tests/src/tests/cgp_impl/basic.rs rename to crates/cgp-tests/tests/component_tests/cgp_impl/basic.rs diff --git a/crates/cgp-tests/src/tests/cgp_impl/mod.rs b/crates/cgp-tests/tests/component_tests/cgp_impl/mod.rs similarity index 100% rename from crates/cgp-tests/src/tests/cgp_impl/mod.rs rename to crates/cgp-tests/tests/component_tests/cgp_impl/mod.rs diff --git a/crates/cgp-tests/src/tests/delegate_components/direct.rs b/crates/cgp-tests/tests/component_tests/delegate_components/direct.rs similarity index 100% rename from crates/cgp-tests/src/tests/delegate_components/direct.rs rename to crates/cgp-tests/tests/component_tests/delegate_components/direct.rs diff --git a/crates/cgp-tests/src/tests/delegate_components/general.rs b/crates/cgp-tests/tests/component_tests/delegate_components/general.rs similarity index 100% rename from crates/cgp-tests/src/tests/delegate_components/general.rs rename to crates/cgp-tests/tests/component_tests/delegate_components/general.rs diff --git a/crates/cgp-tests/src/tests/delegate_components/mod.rs b/crates/cgp-tests/tests/component_tests/delegate_components/mod.rs similarity index 100% rename from crates/cgp-tests/src/tests/delegate_components/mod.rs rename to crates/cgp-tests/tests/component_tests/delegate_components/mod.rs diff --git a/crates/cgp-tests/src/tests/delegate_components/new_struct.rs b/crates/cgp-tests/tests/component_tests/delegate_components/new_struct.rs similarity index 100% rename from crates/cgp-tests/src/tests/delegate_components/new_struct.rs rename to crates/cgp-tests/tests/component_tests/delegate_components/new_struct.rs diff --git a/crates/cgp-tests/tests/component_tests/mod.rs b/crates/cgp-tests/tests/component_tests/mod.rs new file mode 100644 index 00000000..1139b585 --- /dev/null +++ b/crates/cgp-tests/tests/component_tests/mod.rs @@ -0,0 +1,3 @@ +pub mod cgp_component; +pub mod cgp_impl; +pub mod delegate_components; From fc02b20f128d54c82aed94dbf4a3e28246869b74 Mon Sep 17 00:00:00 2001 From: Soares Chen Date: Fri, 17 Oct 2025 19:52:12 +0000 Subject: [PATCH 5/8] Add basic consumer delegate test --- .../consumer_delegate/basic.rs | 40 +++++++++++++++++++ .../component_tests/consumer_delegate/mod.rs | 1 + crates/cgp-tests/tests/component_tests/mod.rs | 1 + 3 files changed, 42 insertions(+) create mode 100644 crates/cgp-tests/tests/component_tests/consumer_delegate/basic.rs create mode 100644 crates/cgp-tests/tests/component_tests/consumer_delegate/mod.rs diff --git a/crates/cgp-tests/tests/component_tests/consumer_delegate/basic.rs b/crates/cgp-tests/tests/component_tests/consumer_delegate/basic.rs new file mode 100644 index 00000000..1c9554f9 --- /dev/null +++ b/crates/cgp-tests/tests/component_tests/consumer_delegate/basic.rs @@ -0,0 +1,40 @@ +use cgp::prelude::*; + +#[cgp_getter] +pub trait HasName { + fn name(&self) -> &str; +} + +#[cgp_getter] +pub trait HasCount { + fn count(&self) -> u32; +} + +#[derive(HasField)] +pub struct App { + pub name: String, + pub count: u32, +} + +delegate_components! { + App { + NameGetterComponent: UseField, + } +} + +impl HasCount for App { + fn count(&self) -> u32 { + self.count + } +} + +#[test] +fn test_basic_consumer_delegate() { + let app = App { + name: "John".to_owned(), + count: 42, + }; + + assert_eq!(app.name(), "John"); + assert_eq!(app.count(), 42); +} diff --git a/crates/cgp-tests/tests/component_tests/consumer_delegate/mod.rs b/crates/cgp-tests/tests/component_tests/consumer_delegate/mod.rs new file mode 100644 index 00000000..38883ee0 --- /dev/null +++ b/crates/cgp-tests/tests/component_tests/consumer_delegate/mod.rs @@ -0,0 +1 @@ +pub mod basic; diff --git a/crates/cgp-tests/tests/component_tests/mod.rs b/crates/cgp-tests/tests/component_tests/mod.rs index 1139b585..304e5c72 100644 --- a/crates/cgp-tests/tests/component_tests/mod.rs +++ b/crates/cgp-tests/tests/component_tests/mod.rs @@ -1,3 +1,4 @@ pub mod cgp_component; pub mod cgp_impl; pub mod delegate_components; +pub mod consumer_delegate; From c404d2688436d56ccfe54937163fcdc27f645e76 Mon Sep 17 00:00:00 2001 From: Soares Chen Date: Fri, 17 Oct 2025 19:56:01 +0000 Subject: [PATCH 6/8] Test generic consumer delegate --- .../consumer_delegate/basic.rs | 2 +- .../consumer_delegate/generics.rs | 38 +++++++++++++++++++ .../component_tests/consumer_delegate/mod.rs | 1 + crates/cgp-tests/tests/component_tests/mod.rs | 2 +- 4 files changed, 41 insertions(+), 2 deletions(-) create mode 100644 crates/cgp-tests/tests/component_tests/consumer_delegate/generics.rs diff --git a/crates/cgp-tests/tests/component_tests/consumer_delegate/basic.rs b/crates/cgp-tests/tests/component_tests/consumer_delegate/basic.rs index 1c9554f9..16b3f56c 100644 --- a/crates/cgp-tests/tests/component_tests/consumer_delegate/basic.rs +++ b/crates/cgp-tests/tests/component_tests/consumer_delegate/basic.rs @@ -22,7 +22,7 @@ delegate_components! { } } -impl HasCount for App { +impl HasCount for App { fn count(&self) -> u32 { self.count } diff --git a/crates/cgp-tests/tests/component_tests/consumer_delegate/generics.rs b/crates/cgp-tests/tests/component_tests/consumer_delegate/generics.rs new file mode 100644 index 00000000..d5fbe9a7 --- /dev/null +++ b/crates/cgp-tests/tests/component_tests/consumer_delegate/generics.rs @@ -0,0 +1,38 @@ +use cgp::prelude::*; + +#[cgp_getter { + provider: ValueGetter, + name: ValueGetterComponent, +}] +pub trait HasValue { + fn value(&self, _tag: PhantomData) -> &Value; +} + +#[derive(HasField)] +pub struct App { + pub name: String, + pub count: u32, +} + +delegate_components! { + App { + ValueGetterComponent: UseField, + } +} + +impl HasValue for App { + fn value(&self, _tag: PhantomData) -> &u32 { + &self.count + } +} + +#[test] +fn test_generic_consumer_delegate() { + let app = App { + name: "John".to_owned(), + count: 42, + }; + + assert_eq!(app.value(PhantomData::), "John"); + assert_eq!(app.value(PhantomData::), &42); +} diff --git a/crates/cgp-tests/tests/component_tests/consumer_delegate/mod.rs b/crates/cgp-tests/tests/component_tests/consumer_delegate/mod.rs index 38883ee0..bfe3d89b 100644 --- a/crates/cgp-tests/tests/component_tests/consumer_delegate/mod.rs +++ b/crates/cgp-tests/tests/component_tests/consumer_delegate/mod.rs @@ -1 +1,2 @@ pub mod basic; +pub mod generics; diff --git a/crates/cgp-tests/tests/component_tests/mod.rs b/crates/cgp-tests/tests/component_tests/mod.rs index 304e5c72..cc6245c5 100644 --- a/crates/cgp-tests/tests/component_tests/mod.rs +++ b/crates/cgp-tests/tests/component_tests/mod.rs @@ -1,4 +1,4 @@ pub mod cgp_component; pub mod cgp_impl; -pub mod delegate_components; pub mod consumer_delegate; +pub mod delegate_components; From 33eda56537f667ece67718d6608ebd983792c715 Mon Sep 17 00:00:00 2001 From: Soares Chen Date: Fri, 17 Oct 2025 19:59:44 +0000 Subject: [PATCH 7/8] Move preset tests into separate test unit --- crates/cgp-tests/src/tests/mod.rs | 1 - crates/cgp-tests/tests/preset.rs | 3 +++ .../tests/preset => tests/preset_tests}/basic/components.rs | 0 .../tests/preset => tests/preset_tests}/basic/contexts.rs | 4 ++-- .../{src/tests/preset => tests/preset_tests}/basic/mod.rs | 0 .../{src/tests/preset => tests/preset_tests}/basic/preset.rs | 2 +- .../preset => tests/preset_tests}/generics/components.rs | 0 .../tests/preset => tests/preset_tests}/generics/contexts.rs | 4 ++-- .../{src/tests/preset => tests/preset_tests}/generics/mod.rs | 0 .../tests/preset => tests/preset_tests}/generics/preset.rs | 2 +- .../preset_tests}/generics_inheritance/components.rs | 0 .../preset_tests}/generics_inheritance/contexts.rs | 4 ++-- .../preset => tests/preset_tests}/generics_inheritance/mod.rs | 0 .../preset_tests}/generics_inheritance/preset_a.rs | 2 +- .../preset_tests}/generics_inheritance/preset_b.rs | 2 +- .../preset => tests/preset_tests}/inheritance/contexts.rs | 4 ++-- .../tests/preset => tests/preset_tests}/inheritance/mod.rs | 0 .../preset => tests/preset_tests}/inheritance/preset_a.rs | 2 +- .../preset => tests/preset_tests}/inheritance/preset_b.rs | 4 ++-- .../cgp-tests/{src/tests/preset => tests/preset_tests}/mod.rs | 2 -- .../preset_tests}/nested_inheritance/contexts.rs | 4 ++-- .../preset => tests/preset_tests}/nested_inheritance/mod.rs | 0 .../preset_tests}/nested_inheritance/preset_a.rs | 2 +- .../preset_tests}/nested_inheritance/preset_b.rs | 4 ++-- .../preset_tests}/nested_inheritance/preset_c.rs | 2 +- .../preset_tests}/nested_inheritance/preset_d.rs | 4 ++-- .../tests/preset => tests/preset_tests}/wrapped/context.rs | 2 +- .../{src/tests/preset => tests/preset_tests}/wrapped/mod.rs | 0 .../tests/preset => tests/preset_tests}/wrapped/preset.rs | 0 29 files changed, 27 insertions(+), 27 deletions(-) create mode 100644 crates/cgp-tests/tests/preset.rs rename crates/cgp-tests/{src/tests/preset => tests/preset_tests}/basic/components.rs (100%) rename crates/cgp-tests/{src/tests/preset => tests/preset_tests}/basic/contexts.rs (82%) rename crates/cgp-tests/{src/tests/preset => tests/preset_tests}/basic/mod.rs (100%) rename crates/cgp-tests/{src/tests/preset => tests/preset_tests}/basic/preset.rs (93%) rename crates/cgp-tests/{src/tests/preset => tests/preset_tests}/generics/components.rs (100%) rename crates/cgp-tests/{src/tests/preset => tests/preset_tests}/generics/contexts.rs (83%) rename crates/cgp-tests/{src/tests/preset => tests/preset_tests}/generics/mod.rs (100%) rename crates/cgp-tests/{src/tests/preset => tests/preset_tests}/generics/preset.rs (91%) rename crates/cgp-tests/{src/tests/preset => tests/preset_tests}/generics_inheritance/components.rs (100%) rename crates/cgp-tests/{src/tests/preset => tests/preset_tests}/generics_inheritance/contexts.rs (80%) rename crates/cgp-tests/{src/tests/preset => tests/preset_tests}/generics_inheritance/mod.rs (100%) rename crates/cgp-tests/{src/tests/preset => tests/preset_tests}/generics_inheritance/preset_a.rs (89%) rename crates/cgp-tests/{src/tests/preset => tests/preset_tests}/generics_inheritance/preset_b.rs (77%) rename crates/cgp-tests/{src/tests/preset => tests/preset_tests}/inheritance/contexts.rs (78%) rename crates/cgp-tests/{src/tests/preset => tests/preset_tests}/inheritance/mod.rs (100%) rename crates/cgp-tests/{src/tests/preset => tests/preset_tests}/inheritance/preset_a.rs (92%) rename crates/cgp-tests/{src/tests/preset => tests/preset_tests}/inheritance/preset_b.rs (82%) rename crates/cgp-tests/{src/tests/preset => tests/preset_tests}/mod.rs (77%) rename crates/cgp-tests/{src/tests/preset => tests/preset_tests}/nested_inheritance/contexts.rs (84%) rename crates/cgp-tests/{src/tests/preset => tests/preset_tests}/nested_inheritance/mod.rs (100%) rename crates/cgp-tests/{src/tests/preset => tests/preset_tests}/nested_inheritance/preset_a.rs (84%) rename crates/cgp-tests/{src/tests/preset => tests/preset_tests}/nested_inheritance/preset_b.rs (76%) rename crates/cgp-tests/{src/tests/preset => tests/preset_tests}/nested_inheritance/preset_c.rs (84%) rename crates/cgp-tests/{src/tests/preset => tests/preset_tests}/nested_inheritance/preset_d.rs (83%) rename crates/cgp-tests/{src/tests/preset => tests/preset_tests}/wrapped/context.rs (87%) rename crates/cgp-tests/{src/tests/preset => tests/preset_tests}/wrapped/mod.rs (100%) rename crates/cgp-tests/{src/tests/preset => tests/preset_tests}/wrapped/preset.rs (100%) diff --git a/crates/cgp-tests/src/tests/mod.rs b/crates/cgp-tests/src/tests/mod.rs index 64afad3e..86fdc838 100644 --- a/crates/cgp-tests/src/tests/mod.rs +++ b/crates/cgp-tests/src/tests/mod.rs @@ -7,6 +7,5 @@ pub mod getter; pub mod has_field; pub mod has_fields; pub mod monad; -pub mod preset; pub mod symbol; pub mod use_delegate; diff --git a/crates/cgp-tests/tests/preset.rs b/crates/cgp-tests/tests/preset.rs new file mode 100644 index 00000000..4dc60a54 --- /dev/null +++ b/crates/cgp-tests/tests/preset.rs @@ -0,0 +1,3 @@ +#![allow(clippy::module_inception)] + +pub mod preset_tests; diff --git a/crates/cgp-tests/src/tests/preset/basic/components.rs b/crates/cgp-tests/tests/preset_tests/basic/components.rs similarity index 100% rename from crates/cgp-tests/src/tests/preset/basic/components.rs rename to crates/cgp-tests/tests/preset_tests/basic/components.rs diff --git a/crates/cgp-tests/src/tests/preset/basic/contexts.rs b/crates/cgp-tests/tests/preset_tests/basic/contexts.rs similarity index 82% rename from crates/cgp-tests/src/tests/preset/basic/contexts.rs rename to crates/cgp-tests/tests/preset_tests/basic/contexts.rs index 2c09da9b..2bbe473e 100644 --- a/crates/cgp-tests/src/tests/preset/basic/contexts.rs +++ b/crates/cgp-tests/tests/preset_tests/basic/contexts.rs @@ -1,9 +1,9 @@ use cgp::prelude::*; -use crate::tests::preset::basic::components::{ +use crate::preset_tests::basic::components::{ BarGetterComponent, BarTypeProviderComponent, FooGetterComponent, FooTypeProviderComponent, }; -use crate::tests::preset::basic::preset::{CheckDelegatesForMyPreset, MyPreset}; +use crate::preset_tests::basic::preset::{CheckDelegatesForMyPreset, MyPreset}; #[cgp_context(MyContextComponents: MyPreset)] #[derive(HasField)] diff --git a/crates/cgp-tests/src/tests/preset/basic/mod.rs b/crates/cgp-tests/tests/preset_tests/basic/mod.rs similarity index 100% rename from crates/cgp-tests/src/tests/preset/basic/mod.rs rename to crates/cgp-tests/tests/preset_tests/basic/mod.rs diff --git a/crates/cgp-tests/src/tests/preset/basic/preset.rs b/crates/cgp-tests/tests/preset_tests/basic/preset.rs similarity index 93% rename from crates/cgp-tests/src/tests/preset/basic/preset.rs rename to crates/cgp-tests/tests/preset_tests/basic/preset.rs index ccdc35bd..15c09117 100644 --- a/crates/cgp-tests/src/tests/preset/basic/preset.rs +++ b/crates/cgp-tests/tests/preset_tests/basic/preset.rs @@ -2,7 +2,7 @@ mod preset { use cgp::prelude::*; - use crate::tests::preset::basic::components::{ + use crate::preset_tests::basic::components::{ BarTypeProviderComponent, FooGetterComponent, FooTypeProviderComponent, }; diff --git a/crates/cgp-tests/src/tests/preset/generics/components.rs b/crates/cgp-tests/tests/preset_tests/generics/components.rs similarity index 100% rename from crates/cgp-tests/src/tests/preset/generics/components.rs rename to crates/cgp-tests/tests/preset_tests/generics/components.rs diff --git a/crates/cgp-tests/src/tests/preset/generics/contexts.rs b/crates/cgp-tests/tests/preset_tests/generics/contexts.rs similarity index 83% rename from crates/cgp-tests/src/tests/preset/generics/contexts.rs rename to crates/cgp-tests/tests/preset_tests/generics/contexts.rs index 0833277b..4f1641ef 100644 --- a/crates/cgp-tests/src/tests/preset/generics/contexts.rs +++ b/crates/cgp-tests/tests/preset_tests/generics/contexts.rs @@ -1,9 +1,9 @@ use cgp::prelude::*; -use crate::tests::preset::generics::components::{ +use crate::preset_tests::generics::components::{ BarGetterComponent, BarTypeProviderComponent, FooGetterComponent, FooTypeProviderComponent, }; -use crate::tests::preset::generics::preset::MyGenericPreset; +use crate::preset_tests::generics::preset::MyGenericPreset; #[cgp_context(MyContextComponents: MyGenericPreset)] #[derive(HasField)] diff --git a/crates/cgp-tests/src/tests/preset/generics/mod.rs b/crates/cgp-tests/tests/preset_tests/generics/mod.rs similarity index 100% rename from crates/cgp-tests/src/tests/preset/generics/mod.rs rename to crates/cgp-tests/tests/preset_tests/generics/mod.rs diff --git a/crates/cgp-tests/src/tests/preset/generics/preset.rs b/crates/cgp-tests/tests/preset_tests/generics/preset.rs similarity index 91% rename from crates/cgp-tests/src/tests/preset/generics/preset.rs rename to crates/cgp-tests/tests/preset_tests/generics/preset.rs index d8a8be17..c0b9cbff 100644 --- a/crates/cgp-tests/src/tests/preset/generics/preset.rs +++ b/crates/cgp-tests/tests/preset_tests/generics/preset.rs @@ -2,7 +2,7 @@ mod preset { use cgp::prelude::*; - use crate::tests::preset::generics::components::{ + use crate::preset_tests::generics::components::{ BarGetterComponent, BarTypeProviderComponent, FooGetterComponent, FooTypeProviderComponent, }; diff --git a/crates/cgp-tests/src/tests/preset/generics_inheritance/components.rs b/crates/cgp-tests/tests/preset_tests/generics_inheritance/components.rs similarity index 100% rename from crates/cgp-tests/src/tests/preset/generics_inheritance/components.rs rename to crates/cgp-tests/tests/preset_tests/generics_inheritance/components.rs diff --git a/crates/cgp-tests/src/tests/preset/generics_inheritance/contexts.rs b/crates/cgp-tests/tests/preset_tests/generics_inheritance/contexts.rs similarity index 80% rename from crates/cgp-tests/src/tests/preset/generics_inheritance/contexts.rs rename to crates/cgp-tests/tests/preset_tests/generics_inheritance/contexts.rs index e6896fad..0b330169 100644 --- a/crates/cgp-tests/src/tests/preset/generics_inheritance/contexts.rs +++ b/crates/cgp-tests/tests/preset_tests/generics_inheritance/contexts.rs @@ -1,9 +1,9 @@ use cgp::prelude::*; -use crate::tests::preset::generics_inheritance::components::{ +use crate::preset_tests::generics_inheritance::components::{ BarGetterComponent, BarTypeProviderComponent, FooGetterComponent, FooTypeProviderComponent, }; -use crate::tests::preset::generics_inheritance::preset_b::MyGenericPresetB; +use crate::preset_tests::generics_inheritance::preset_b::MyGenericPresetB; #[cgp_context(MyContextComponents: MyGenericPresetB<()>)] #[derive(HasField)] diff --git a/crates/cgp-tests/src/tests/preset/generics_inheritance/mod.rs b/crates/cgp-tests/tests/preset_tests/generics_inheritance/mod.rs similarity index 100% rename from crates/cgp-tests/src/tests/preset/generics_inheritance/mod.rs rename to crates/cgp-tests/tests/preset_tests/generics_inheritance/mod.rs diff --git a/crates/cgp-tests/src/tests/preset/generics_inheritance/preset_a.rs b/crates/cgp-tests/tests/preset_tests/generics_inheritance/preset_a.rs similarity index 89% rename from crates/cgp-tests/src/tests/preset/generics_inheritance/preset_a.rs rename to crates/cgp-tests/tests/preset_tests/generics_inheritance/preset_a.rs index ff903993..2c9d8b53 100644 --- a/crates/cgp-tests/src/tests/preset/generics_inheritance/preset_a.rs +++ b/crates/cgp-tests/tests/preset_tests/generics_inheritance/preset_a.rs @@ -2,7 +2,7 @@ mod preset { use cgp::prelude::*; - use crate::tests::preset::generics_inheritance::components::{ + use crate::preset_tests::generics_inheritance::components::{ BarGetterComponent, BarTypeProviderComponent, FooGetterComponent, FooTypeProviderComponent, }; diff --git a/crates/cgp-tests/src/tests/preset/generics_inheritance/preset_b.rs b/crates/cgp-tests/tests/preset_tests/generics_inheritance/preset_b.rs similarity index 77% rename from crates/cgp-tests/src/tests/preset/generics_inheritance/preset_b.rs rename to crates/cgp-tests/tests/preset_tests/generics_inheritance/preset_b.rs index 067a034a..392707f6 100644 --- a/crates/cgp-tests/src/tests/preset/generics_inheritance/preset_b.rs +++ b/crates/cgp-tests/tests/preset_tests/generics_inheritance/preset_b.rs @@ -4,7 +4,7 @@ mod preset { use cgp::prelude::*; - use crate::tests::preset::generics_inheritance::preset_a::MyGenericPresetA; + use crate::preset_tests::generics_inheritance::preset_a::MyGenericPresetA; cgp_preset! { MyGenericPresetB: MyGenericPresetA { diff --git a/crates/cgp-tests/src/tests/preset/inheritance/contexts.rs b/crates/cgp-tests/tests/preset_tests/inheritance/contexts.rs similarity index 78% rename from crates/cgp-tests/src/tests/preset/inheritance/contexts.rs rename to crates/cgp-tests/tests/preset_tests/inheritance/contexts.rs index 094c2a96..7e0418d0 100644 --- a/crates/cgp-tests/src/tests/preset/inheritance/contexts.rs +++ b/crates/cgp-tests/tests/preset_tests/inheritance/contexts.rs @@ -1,9 +1,9 @@ use cgp::prelude::*; -use crate::tests::preset::basic::components::{ +use crate::preset_tests::basic::components::{ BarGetterComponent, BarTypeProviderComponent, FooGetterComponent, FooTypeProviderComponent, }; -use crate::tests::preset::inheritance::preset_b::{CheckDelegatesForMyPresetB, MyPresetB}; +use crate::preset_tests::inheritance::preset_b::{CheckDelegatesForMyPresetB, MyPresetB}; #[cgp_context(MyContextComponents: MyPresetB)] #[derive(HasField)] diff --git a/crates/cgp-tests/src/tests/preset/inheritance/mod.rs b/crates/cgp-tests/tests/preset_tests/inheritance/mod.rs similarity index 100% rename from crates/cgp-tests/src/tests/preset/inheritance/mod.rs rename to crates/cgp-tests/tests/preset_tests/inheritance/mod.rs diff --git a/crates/cgp-tests/src/tests/preset/inheritance/preset_a.rs b/crates/cgp-tests/tests/preset_tests/inheritance/preset_a.rs similarity index 92% rename from crates/cgp-tests/src/tests/preset/inheritance/preset_a.rs rename to crates/cgp-tests/tests/preset_tests/inheritance/preset_a.rs index bd3ff96e..86795e21 100644 --- a/crates/cgp-tests/src/tests/preset/inheritance/preset_a.rs +++ b/crates/cgp-tests/tests/preset_tests/inheritance/preset_a.rs @@ -2,7 +2,7 @@ mod preset { use cgp::prelude::*; - use crate::tests::preset::basic::components::{ + use crate::preset_tests::basic::components::{ BarTypeProviderComponent, FooTypeProviderComponent, }; diff --git a/crates/cgp-tests/src/tests/preset/inheritance/preset_b.rs b/crates/cgp-tests/tests/preset_tests/inheritance/preset_b.rs similarity index 82% rename from crates/cgp-tests/src/tests/preset/inheritance/preset_b.rs rename to crates/cgp-tests/tests/preset_tests/inheritance/preset_b.rs index 79154e2c..6f68f808 100644 --- a/crates/cgp-tests/src/tests/preset/inheritance/preset_b.rs +++ b/crates/cgp-tests/tests/preset_tests/inheritance/preset_b.rs @@ -2,8 +2,8 @@ mod preset { use cgp::prelude::*; - use crate::tests::preset::basic::components::{BarGetterComponent, FooGetterComponent}; - use crate::tests::preset::inheritance::preset_a::MyPresetA; + use crate::preset_tests::basic::components::{BarGetterComponent, FooGetterComponent}; + use crate::preset_tests::inheritance::preset_a::MyPresetA; cgp_preset! { MyPresetB: MyPresetA { diff --git a/crates/cgp-tests/src/tests/preset/mod.rs b/crates/cgp-tests/tests/preset_tests/mod.rs similarity index 77% rename from crates/cgp-tests/src/tests/preset/mod.rs rename to crates/cgp-tests/tests/preset_tests/mod.rs index 8db83867..7af1795b 100644 --- a/crates/cgp-tests/src/tests/preset/mod.rs +++ b/crates/cgp-tests/tests/preset_tests/mod.rs @@ -1,5 +1,3 @@ -#![allow(clippy::module_inception)] - pub mod basic; pub mod generics; pub mod generics_inheritance; diff --git a/crates/cgp-tests/src/tests/preset/nested_inheritance/contexts.rs b/crates/cgp-tests/tests/preset_tests/nested_inheritance/contexts.rs similarity index 84% rename from crates/cgp-tests/src/tests/preset/nested_inheritance/contexts.rs rename to crates/cgp-tests/tests/preset_tests/nested_inheritance/contexts.rs index a4837200..625de94d 100644 --- a/crates/cgp-tests/src/tests/preset/nested_inheritance/contexts.rs +++ b/crates/cgp-tests/tests/preset_tests/nested_inheritance/contexts.rs @@ -1,9 +1,9 @@ use cgp::prelude::*; -use crate::tests::preset::basic::components::{ +use crate::preset_tests::basic::components::{ BarGetterComponent, BarTypeProviderComponent, FooGetterComponent, FooTypeProviderComponent, }; -use crate::tests::preset::nested_inheritance::preset_d::{ +use crate::preset_tests::nested_inheritance::preset_d::{ CheckDelegatesForNestedPresetD, NestedPresetD, }; diff --git a/crates/cgp-tests/src/tests/preset/nested_inheritance/mod.rs b/crates/cgp-tests/tests/preset_tests/nested_inheritance/mod.rs similarity index 100% rename from crates/cgp-tests/src/tests/preset/nested_inheritance/mod.rs rename to crates/cgp-tests/tests/preset_tests/nested_inheritance/mod.rs diff --git a/crates/cgp-tests/src/tests/preset/nested_inheritance/preset_a.rs b/crates/cgp-tests/tests/preset_tests/nested_inheritance/preset_a.rs similarity index 84% rename from crates/cgp-tests/src/tests/preset/nested_inheritance/preset_a.rs rename to crates/cgp-tests/tests/preset_tests/nested_inheritance/preset_a.rs index 20cd740a..1c094d1f 100644 --- a/crates/cgp-tests/src/tests/preset/nested_inheritance/preset_a.rs +++ b/crates/cgp-tests/tests/preset_tests/nested_inheritance/preset_a.rs @@ -2,7 +2,7 @@ mod preset { use cgp::prelude::*; - use crate::tests::preset::basic::components::{FooGetterComponent, FooTypeProviderComponent}; + use crate::preset_tests::basic::components::{FooGetterComponent, FooTypeProviderComponent}; cgp_preset! { NestedPresetA { diff --git a/crates/cgp-tests/src/tests/preset/nested_inheritance/preset_b.rs b/crates/cgp-tests/tests/preset_tests/nested_inheritance/preset_b.rs similarity index 76% rename from crates/cgp-tests/src/tests/preset/nested_inheritance/preset_b.rs rename to crates/cgp-tests/tests/preset_tests/nested_inheritance/preset_b.rs index b97fec7c..8b1cc80d 100644 --- a/crates/cgp-tests/src/tests/preset/nested_inheritance/preset_b.rs +++ b/crates/cgp-tests/tests/preset_tests/nested_inheritance/preset_b.rs @@ -2,8 +2,8 @@ mod preset { use cgp::prelude::*; - use crate::tests::preset::basic::components::{BarTypeProviderComponent, FooGetterComponent}; - use crate::tests::preset::nested_inheritance::preset_a::NestedPresetA; + use crate::preset_tests::basic::components::{BarTypeProviderComponent, FooGetterComponent}; + use crate::preset_tests::nested_inheritance::preset_a::NestedPresetA; cgp_preset! { NestedPresetB: NestedPresetA { diff --git a/crates/cgp-tests/src/tests/preset/nested_inheritance/preset_c.rs b/crates/cgp-tests/tests/preset_tests/nested_inheritance/preset_c.rs similarity index 84% rename from crates/cgp-tests/src/tests/preset/nested_inheritance/preset_c.rs rename to crates/cgp-tests/tests/preset_tests/nested_inheritance/preset_c.rs index 021f72b8..1e686347 100644 --- a/crates/cgp-tests/src/tests/preset/nested_inheritance/preset_c.rs +++ b/crates/cgp-tests/tests/preset_tests/nested_inheritance/preset_c.rs @@ -2,7 +2,7 @@ mod preset { use cgp::prelude::*; - use crate::tests::preset::basic::components::{BarGetterComponent, BarTypeProviderComponent}; + use crate::preset_tests::basic::components::{BarGetterComponent, BarTypeProviderComponent}; cgp_preset! { NestedPresetC { diff --git a/crates/cgp-tests/src/tests/preset/nested_inheritance/preset_d.rs b/crates/cgp-tests/tests/preset_tests/nested_inheritance/preset_d.rs similarity index 83% rename from crates/cgp-tests/src/tests/preset/nested_inheritance/preset_d.rs rename to crates/cgp-tests/tests/preset_tests/nested_inheritance/preset_d.rs index f92e3907..817244a2 100644 --- a/crates/cgp-tests/src/tests/preset/nested_inheritance/preset_d.rs +++ b/crates/cgp-tests/tests/preset_tests/nested_inheritance/preset_d.rs @@ -2,8 +2,8 @@ mod preset { use cgp::prelude::*; - use crate::tests::preset::nested_inheritance::preset_b::NestedPresetB; - use crate::tests::preset::nested_inheritance::preset_c::NestedPresetC; + use crate::preset_tests::nested_inheritance::preset_b::NestedPresetB; + use crate::preset_tests::nested_inheritance::preset_c::NestedPresetC; cgp_preset! { NestedPresetD: NestedPresetB + NestedPresetC { diff --git a/crates/cgp-tests/src/tests/preset/wrapped/context.rs b/crates/cgp-tests/tests/preset_tests/wrapped/context.rs similarity index 87% rename from crates/cgp-tests/src/tests/preset/wrapped/context.rs rename to crates/cgp-tests/tests/preset_tests/wrapped/context.rs index cf65e5d3..f5aab4d2 100644 --- a/crates/cgp-tests/src/tests/preset/wrapped/context.rs +++ b/crates/cgp-tests/tests/preset_tests/wrapped/context.rs @@ -3,7 +3,7 @@ use core::convert::Infallible; use cgp::core::error::{ErrorRaiserComponent, ErrorTypeProviderComponent}; use cgp::prelude::*; -use crate::tests::preset::wrapped::preset::{BoxError, ErrorHandlerPreset}; +use crate::preset_tests::wrapped::preset::{BoxError, ErrorHandlerPreset}; #[cgp_context] pub struct MyContext; diff --git a/crates/cgp-tests/src/tests/preset/wrapped/mod.rs b/crates/cgp-tests/tests/preset_tests/wrapped/mod.rs similarity index 100% rename from crates/cgp-tests/src/tests/preset/wrapped/mod.rs rename to crates/cgp-tests/tests/preset_tests/wrapped/mod.rs diff --git a/crates/cgp-tests/src/tests/preset/wrapped/preset.rs b/crates/cgp-tests/tests/preset_tests/wrapped/preset.rs similarity index 100% rename from crates/cgp-tests/src/tests/preset/wrapped/preset.rs rename to crates/cgp-tests/tests/preset_tests/wrapped/preset.rs From d18f590fd0f1e5722eee9f81523482697e8edaab Mon Sep 17 00:00:00 2001 From: Soares Chen Date: Fri, 17 Oct 2025 20:02:49 +0000 Subject: [PATCH 8/8] Test consumer delegation in preset --- .../preset_tests/basic/consumer_delegate.rs | 36 +++++++++++++++++++ .../cgp-tests/tests/preset_tests/basic/mod.rs | 1 + 2 files changed, 37 insertions(+) create mode 100644 crates/cgp-tests/tests/preset_tests/basic/consumer_delegate.rs diff --git a/crates/cgp-tests/tests/preset_tests/basic/consumer_delegate.rs b/crates/cgp-tests/tests/preset_tests/basic/consumer_delegate.rs new file mode 100644 index 00000000..817bbd5e --- /dev/null +++ b/crates/cgp-tests/tests/preset_tests/basic/consumer_delegate.rs @@ -0,0 +1,36 @@ +use cgp::prelude::*; + +use crate::preset_tests::basic::components::{ + BarTypeProviderComponent, FooGetterComponent, FooTypeProviderComponent, HasBar, +}; +use crate::preset_tests::basic::preset::{CheckDelegatesForMyPreset, MyPreset}; + +#[derive(HasField)] +pub struct MyContext { + pub foo: (), + pub bar: (), +} + +impl<__Name__> DelegateComponent<__Name__> for MyContext +where + Self: MyPreset::IsPreset<__Name__>, + MyPreset::Components: DelegateComponent<__Name__>, +{ + type Delegate = >::Delegate; +} + +impl HasBar for MyContext { + fn bar(&self) -> &Self::Bar { + &self.bar + } +} + +check_components! { + CanUseMyContext for MyContext { + FooTypeProviderComponent, + BarTypeProviderComponent, + FooGetterComponent, + } +} + +impl CheckDelegatesForMyPreset for MyContext {} diff --git a/crates/cgp-tests/tests/preset_tests/basic/mod.rs b/crates/cgp-tests/tests/preset_tests/basic/mod.rs index 6960be78..9f6ff9b2 100644 --- a/crates/cgp-tests/tests/preset_tests/basic/mod.rs +++ b/crates/cgp-tests/tests/preset_tests/basic/mod.rs @@ -1,3 +1,4 @@ pub mod components; +pub mod consumer_delegate; pub mod contexts; pub mod preset;