-
Notifications
You must be signed in to change notification settings - Fork 5
Open
Description
Summary
The derive_provider
macros would allow trait-generic providers to be automatically implemented following similar boilerplates. Below are some examples:
WithProvider
#[derive_provider(WithProvider)]
#[cgp_component { name: NameTypeComponent, provider: ProvideNameType }]
pub trait HasNameType {
type Name;
}
would have the following derived:
impl<Context, Provider, Type> ProvideNameType<Context> for WithProvider<Provider>
where
Provider: ProvideType<NameTypeComponent, Type = Name>,
{
type Name = Name;
}
UseContext
#[derive_provider(UseContext)]
#[cgp_component { provider: NameGetter }]
pub trait HasName {
fn get_name(&self) -> &String;
}
would have the following derived:
impl<Context> NameGetter<Context> for UseContext
where
Context: HasName,
{
fn get_name(context: &Context) -> &String {
context.get_name()
}
}
UseField
#[derive_provider(UseField)]
#[cgp_component { provider: NameGetter }]
pub trait HasName {
fn get_name(&self) -> &String;
}
Would have the following derived:
impl<Context, Tag> NameGetter<Context> for UseField<Tag>
where
Context: HasField<Tag, Value = String>,
{
fn get_name(context: &Context) -> &String {
context.get_field(PhantomData)
}
}
Metadata
Metadata
Assignees
Labels
No labels