cgp_type/traits/
has_type.rs

1use 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}