hypershell-tokio-components 0.1.0-alpha

Modular DSL for shellscripting in Rust
Documentation
#[cgp::re_export_imports]
mod preset {
    use std::path::PathBuf;
    use std::vec::Vec;

    use cgp::core::component::UseDelegate;
    use cgp::extra::handler::{HandlerComponent, PipeHandlers, UseInputDelegate};
    use cgp::prelude::{cgp_preset, *};
    use hypershell_components::components::{
        CommandArgExtractorComponent, CommandArgTypeProviderComponent,
    };
    use hypershell_components::dsl::{
        BytesToStream, FieldArg, FieldArgs, JoinArgs, ReadFile, SimpleExec, StaticArg,
        StreamToBytes, StreamToStdout, StreamToString, StreamingExec, WithArgs,
    };
    use hypershell_components::providers::{Call, ExtractStringCommandArg};

    use crate::components::CommandUpdaterComponent;
    use crate::dsl::CoreExec;
    use crate::providers::{
        ConvertBytesToStream, ConvertStreamToBytes, ConvertStreamToString, ExtractArgs,
        ExtractFieldArgs, FuturesToTokioStream, HandleCoreExec, HandleReadFile, HandleSimpleExec,
        HandleStreamToStdout, HandleStreamingExec, JoinExtractArgs, WrapTokioAsyncReadStream,
    };
    use crate::types::{FuturesAsyncReadStream, TokioAsyncReadStream};

    cgp_preset! {
        HypershellTokioPreset {
            CommandArgTypeProviderComponent:
                UseType<PathBuf>,
            HandlerComponent:
                TokioHandlerPreset::Provider,
            CommandArgExtractorComponent:
                CommandArgExtractorPreset::Provider,
            CommandUpdaterComponent:
                CommandUpdaterPreset::Provider,
        }
    }

    cgp_preset! {
        #[wrap_provider(UseDelegate)]
        TokioHandlerPreset {
            <Path, Args> SimpleExec<Path, Args>:
                HandleSimpleExec,
            <Path, Args> StreamingExec<Path, Args>:
                StreamingExecHandlers::Provider,
            <Path, Args> CoreExec<Path, Args>:
                HandleCoreExec,
            <Path> ReadFile<Path>:
                PipeHandlers<Product![
                    HandleReadFile,
                    WrapTokioAsyncReadStream,
                ]>,
            StreamToBytes:
                ConvertStreamToBytes,
            StreamToString:
                ConvertStreamToString,
            BytesToStream:
                ConvertBytesToStream,
            StreamToStdout:
                StreamingToStdoutHandlers::Provider,
        }
    }

    cgp_preset! {
        #[wrap_provider(UseDelegate)]
        CommandArgExtractorPreset {
            [
                <Arg> StaticArg<Arg>,
                <Tag> FieldArg<Tag>,
            ]: ExtractStringCommandArg,
            <Args> JoinArgs<Args>:
                JoinExtractArgs,
        }
    }

    cgp_preset! {
        #[wrap_provider(UseDelegate)]
        CommandUpdaterPreset {
            <Args> WithArgs<Args>: ExtractArgs,
            <Tag> FieldArgs<Tag>: ExtractFieldArgs,
        }
    }

    cgp_preset! {
        #[wrap_provider(UseInputDelegate)]
        StreamingToStdoutHandlers {
            <S> FuturesAsyncReadStream<S>:
                PipeHandlers<Product![
                    FuturesToTokioStream,
                    HandleStreamToStdout,
                ]>,
            <S> TokioAsyncReadStream<S>:
                HandleStreamToStdout,
            Vec<u8>:
                PipeHandlers<Product![
                    Call<BytesToStream>,
                    HandleStreamToStdout,
                ]>,
        }
    }

    cgp_preset! {
        #[wrap_provider(UseInputDelegate)]
        StreamingExecHandlers {
            <S> FuturesAsyncReadStream<S>:
                PipeHandlers<Product![
                    FuturesToTokioStream,
                    HandleStreamingExec,
                    WrapTokioAsyncReadStream,
                ]>,
            <S> TokioAsyncReadStream<S>:
                PipeHandlers<Product![
                    HandleStreamingExec,
                    WrapTokioAsyncReadStream,
                ]>,
            Vec<u8>:
                PipeHandlers<Product![
                    Call<BytesToStream>,
                    HandleStreamingExec,
                    WrapTokioAsyncReadStream,
                ]>,
        }
    }
}