Skip to main content

cgp_dispatch/providers/field_matchers/
first_field_value.rs

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