hypershell-reqwest-components 0.1.0-alpha

Modular DSL for shellscripting in Rust
Documentation
use core::marker::PhantomData;
use std::borrow::Cow;

use cgp::prelude::*;
use hypershell_components::components::{
    CanExtractStringArg, StringArgExtractor, StringArgExtractorComponent,
};
use hypershell_components::dsl::UrlEncodeArg;
use url::form_urlencoded;

#[cgp_new_provider]
impl<Context, Arg> StringArgExtractor<Context, UrlEncodeArg<Arg>> for UrlEncodeStringArg
where
    Context: CanExtractStringArg<Arg>,
{
    fn extract_string_arg(
        context: &Context,
        _phantom: PhantomData<UrlEncodeArg<Arg>>,
    ) -> Cow<'_, str> {
        let raw_arg = context.extract_string_arg(PhantomData);
        form_urlencoded::byte_serialize(raw_arg.as_bytes()).collect()
    }
}