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