cgp_handler/providers/
field.rs1use cgp_core::prelude::*;
2
3use crate::{
4 Computer, ComputerComponent, Handler, HandlerComponent, TryComputer, TryComputerComponent,
5};
6
7pub struct HandleFieldValue<Provider = UseContext>(pub PhantomData<Provider>);
8
9#[cgp_provider]
10impl<Context, Code, Tag, Input, Output, Provider> Computer<Context, Code, Field<Tag, Input>>
11 for HandleFieldValue<Provider>
12where
13 Provider: Computer<Context, Code, Input, Output = Output>,
14{
15 type Output = Output;
16
17 fn compute(
18 context: &Context,
19 tag: PhantomData<Code>,
20 input: Field<Tag, Input>,
21 ) -> Self::Output {
22 Provider::compute(context, tag, input.value)
23 }
24}
25
26#[cgp_provider]
27impl<Context, Code, Tag, Input, Output, Provider> TryComputer<Context, Code, Field<Tag, Input>>
28 for HandleFieldValue<Provider>
29where
30 Context: HasErrorType,
31 Provider: TryComputer<Context, Code, Input, Output = Output>,
32{
33 type Output = Output;
34
35 fn try_compute(
36 context: &Context,
37 tag: PhantomData<Code>,
38 input: Field<Tag, Input>,
39 ) -> Result<Self::Output, Context::Error> {
40 Provider::try_compute(context, tag, input.value)
41 }
42}
43
44#[cgp_provider]
45impl<Context, Code: Send, Tag: Send, Input: Send, Provider>
46 Handler<Context, Code, Field<Tag, Input>> for HandleFieldValue<Provider>
47where
48 Context: HasAsyncErrorType,
49 Provider: Handler<Context, Code, Input>,
50{
51 type Output = Provider::Output;
52
53 async fn handle(
54 context: &Context,
55 tag: PhantomData<Code>,
56 input: Field<Tag, Input>,
57 ) -> Result<Self::Output, Context::Error> {
58 Provider::handle(context, tag, input.value).await
59 }
60}