cgp-handler 0.5.0-alpha

Generalized handler interfaces for functional programming
Documentation
use cgp_core::prelude::*;

use crate::{
    AsyncComputerComponent, AsyncComputerRefComponent, ComputerComponent, ComputerRefComponent,
    HandlerComponent, HandlerRefComponent, Promote, PromoteAsync, PromoteRef, TryComputerComponent,
    TryComputerRefComponent, TryPromote,
};

delegate_components! {
    <Provider>
    new PromoteComputer<Provider> {
        ComputerRefComponent: PromoteRef<Provider>,
        TryComputerComponent: Promote<Provider>,
        TryComputerRefComponent: PromoteRef<Provider>,
        AsyncComputerComponent: PromoteAsync<Provider>,
        AsyncComputerRefComponent: PromoteRef<Provider>,
        HandlerComponent: PromoteAsync<Provider>,
        HandlerRefComponent: PromoteRef<Provider>,
    }
}

delegate_components! {
    <Provider>
    new PromoteTryComputer<Provider> {
        TryComputerComponent: TryPromote<Provider>,
        [
            ComputerRefComponent,
            TryComputerRefComponent,
            AsyncComputerComponent,
            AsyncComputerRefComponent,
            HandlerComponent,
            HandlerRefComponent,
        ] ->
            PromoteComputer<Provider>,
    }
}

delegate_components! {
    <Provider>
    new PromoteProducer<Provider> {
        ComputerComponent: Promote<Provider>,
        [
            ComputerRefComponent,
            TryComputerComponent,
            TryComputerRefComponent,
            AsyncComputerComponent,
            AsyncComputerRefComponent,
            HandlerComponent,
            HandlerRefComponent,
        ] ->
            PromoteComputer<Provider>,
    }
}

delegate_components! {
    <Provider>
    new PromoteAsyncComputer<Provider> {
        AsyncComputerRefComponent: PromoteRef<Provider>,
        HandlerComponent: Promote<Provider>,
        HandlerRefComponent: PromoteRef<Provider>,
    }
}

delegate_components! {
    <Provider>
    new PromoteHandler<Provider> {
        HandlerComponent: TryPromote<Provider>,
        [
            AsyncComputerRefComponent,
            HandlerRefComponent,
        ] ->
            PromoteAsyncComputer<Provider>,
    }
}