cgp_type/traits/
has_type.rs1use cgp_component::{DelegateComponent, HasCgpProvider, IsProviderFor, UseContext, UseDelegate};
2use cgp_macro::{cgp_component, cgp_provider};
3
4#[cgp_component {
5 name: TypeComponent,
6 provider: ProvideType,
7}]
8pub trait HasType<Tag> {
9 type Type;
10}
11
12pub type TypeOf<Context, Tag> = <Context as HasType<Tag>>::Type;
13
14#[cgp_provider(TypeComponent)]
15impl<Context, Tag, Components, Delegate> ProvideType<Context, Tag> for UseDelegate<Components>
16where
17 Components: DelegateComponent<Tag, Delegate = Delegate>,
18 Delegate: ProvideType<Context, Tag>,
19{
20 type Type = Delegate::Type;
21}