cgp_dispatch/providers/with_handlers/
build_with_handlers.rs1use cgp_core::prelude::*;
2use cgp_handler::{
3 Computer, ComputerComponent, Handler, HandlerComponent, PipeHandlers, TryComputer,
4 TryComputerComponent,
5};
6
7pub struct BuildWithHandlers<Output, Handlers>(pub PhantomData<(Output, Handlers)>);
8
9#[cgp_provider]
10impl<Context, Code, Input, Output, Builder, Handlers, Res> Computer<Context, Code, Input>
11 for BuildWithHandlers<Output, Handlers>
12where
13 Output: HasBuilder<Builder = Builder>,
14 PipeHandlers<Handlers>: Computer<Context, Code, Builder, Output = Res>,
15 Res: FinalizeBuild<Target = Output>,
16{
17 type Output = Output;
18
19 fn compute(context: &Context, code: PhantomData<Code>, _input: Input) -> Self::Output {
20 PipeHandlers::compute(context, code, Output::builder()).finalize_build()
21 }
22}
23
24#[cgp_provider]
25impl<Context, Code, Input, Output, Builder, Handlers, Res> TryComputer<Context, Code, Input>
26 for BuildWithHandlers<Output, Handlers>
27where
28 Context: HasErrorType,
29 Output: HasBuilder<Builder = Builder>,
30 PipeHandlers<Handlers>: TryComputer<Context, Code, Builder, Output = Res>,
31 Res: FinalizeBuild<Target = Output>,
32{
33 type Output = Output;
34
35 fn try_compute(
36 context: &Context,
37 code: PhantomData<Code>,
38 _input: Input,
39 ) -> Result<Self::Output, Context::Error> {
40 Ok(PipeHandlers::try_compute(context, code, Output::builder())?.finalize_build())
41 }
42}
43
44#[cgp_provider]
45impl<Context, Code, Input, Output, Builder, Handlers, Res> Handler<Context, Code, Input>
46 for BuildWithHandlers<Output, Handlers>
47where
48 Context: HasErrorType,
49 Output: HasBuilder<Builder = Builder>,
50 PipeHandlers<Handlers>: Handler<Context, Code, Builder, Output = Res>,
51 Res: FinalizeBuild<Target = Output>,
52{
53 type Output = Output;
54
55 async fn handle(
56 context: &Context,
57 code: PhantomData<Code>,
58 _input: Input,
59 ) -> Result<Self::Output, Context::Error> {
60 Ok(PipeHandlers::handle(context, code, Output::builder())
61 .await?
62 .finalize_build())
63 }
64}