Skip to main content

cgp_handler/components/
handler.rs

1use core::marker::PhantomData;
2
3use cgp::component::UseDelegate;
4use cgp::prelude::*;
5
6use crate::UseInputDelegate;
7
8#[async_trait]
9#[cgp_component(Handler)]
10#[prefix(@cgp.extra.handler in DefaultNamespace)]
11#[derive_delegate(UseDelegate<Code>)]
12#[derive_delegate(UseInputDelegate<Input>)]
13#[use_type(HasErrorType.Error)]
14pub trait CanHandle<Code, Input> {
15    type Output;
16
17    async fn handle(&self, _tag: PhantomData<Code>, input: Input) -> Result<Self::Output, Error>;
18}
19
20#[async_trait]
21#[cgp_component(HandlerRef)]
22#[prefix(@cgp.extra.handler in DefaultNamespace)]
23#[derive_delegate(UseDelegate<Code>)]
24#[derive_delegate(UseInputDelegate<Input>)]
25#[use_type(HasErrorType.Error)]
26pub trait CanHandleRef<Code, Input> {
27    type Output;
28
29    async fn handle_ref(
30        &self,
31        _tag: PhantomData<Code>,
32        input: &Input,
33    ) -> Result<Self::Output, Error>;
34}