hypershell_reqwest_components/providers/
url_encode.rs

1use core::marker::PhantomData;
2use std::borrow::Cow;
3
4use cgp::prelude::*;
5use hypershell_components::components::{
6    CanExtractStringArg, StringArgExtractor, StringArgExtractorComponent,
7};
8use hypershell_components::dsl::UrlEncodeArg;
9use url::form_urlencoded;
10
11#[cgp_new_provider]
12impl<Context, Arg> StringArgExtractor<Context, UrlEncodeArg<Arg>> for UrlEncodeStringArg
13where
14    Context: CanExtractStringArg<Arg>,
15{
16    fn extract_string_arg(
17        context: &Context,
18        _phantom: PhantomData<UrlEncodeArg<Arg>>,
19    ) -> Cow<'_, str> {
20        let raw_arg = context.extract_string_arg(PhantomData);
21        form_urlencoded::byte_serialize(raw_arg.as_bytes()).collect()
22    }
23}