cgp_dispatch/providers/field_matchers/
field_value.rs1use cgp_core::prelude::*;
2use cgp_handler::{AsyncComputer, AsyncComputerComponent, Computer, ComputerComponent};
3
4pub struct HandleFieldValue<Provider = UseContext>(pub PhantomData<Provider>);
5
6#[cgp_provider]
7impl<Context, Code, Tag, Input, Output, Provider> Computer<Context, Code, Field<Tag, Input>>
8 for HandleFieldValue<Provider>
9where
10 Provider: Computer<Context, Code, Input, Output = Output>,
11{
12 type Output = Output;
13
14 fn compute(
15 context: &Context,
16 tag: PhantomData<Code>,
17 input: Field<Tag, Input>,
18 ) -> Self::Output {
19 Provider::compute(context, tag, input.value)
20 }
21}
22
23#[cgp_provider]
24impl<Context, Code, Tag, Input, Provider> AsyncComputer<Context, Code, Field<Tag, Input>>
25 for HandleFieldValue<Provider>
26where
27 Provider: AsyncComputer<Context, Code, Input>,
28{
29 type Output = Provider::Output;
30
31 async fn compute_async(
32 context: &Context,
33 tag: PhantomData<Code>,
34 input: Field<Tag, Input>,
35 ) -> Self::Output {
36 Provider::compute_async(context, tag, input.value).await
37 }
38}