cgp_field/impls/
use_ref.rs

1use core::marker::PhantomData;
2
3use cgp_component::WithProvider;
4
5use crate::traits::{FieldGetter, HasField, HasFieldMut, MutFieldGetter};
6
7pub struct UseFieldRef<Tag, Value>(pub PhantomData<(Tag, Value)>);
8
9pub type WithFieldRef<Tag, Value> = WithProvider<UseFieldRef<Tag, Value>>;
10
11impl<Context, OutTag, Tag, Value> FieldGetter<Context, OutTag> for UseFieldRef<Tag, Value>
12where
13    Context: HasField<Tag, Value: AsRef<Value> + 'static>,
14{
15    type Value = Value;
16
17    fn get_field(context: &Context, _tag: PhantomData<OutTag>) -> &Value {
18        context.get_field(PhantomData).as_ref()
19    }
20}
21
22impl<Context, OutTag, Tag, Value> MutFieldGetter<Context, OutTag> for UseFieldRef<Tag, Value>
23where
24    Context: HasFieldMut<Tag, Value: AsRef<Value> + AsMut<Value> + 'static>,
25{
26    fn get_field_mut(context: &mut Context, _tag: PhantomData<OutTag>) -> &mut Value {
27        context.get_field_mut(PhantomData).as_mut()
28    }
29}