hermes_cli_components/impls/parse/
field.rs

1use core::marker::PhantomData;
2
3use cgp::prelude::*;
4
5use crate::traits::parse::ArgParser;
6
7pub struct GetField;
8
9impl<App, Args, Tag, Field> ArgParser<App, Args, Tag> for GetField
10where
11    App: HasErrorType,
12    Args: HasField<Tag, Field = Field>,
13    Field: Async + Clone,
14{
15    type Parsed = Field;
16
17    fn parse_arg(
18        _app: &App,
19        args: &Args,
20        _tag: PhantomData<Tag>,
21    ) -> Result<Self::Parsed, App::Error> {
22        Ok(args.get_field(PhantomData).clone())
23    }
24}
25
26pub struct GetFieldWithTag<Tag>(pub PhantomData<Tag>);
27
28impl<App, Args, TagA, TagB, Field> ArgParser<App, Args, TagA> for GetFieldWithTag<TagB>
29where
30    App: HasErrorType,
31    Args: HasField<TagB, Field = Field>,
32    Field: Async + Clone,
33    TagB: Async,
34{
35    type Parsed = Field;
36
37    fn parse_arg(
38        _app: &App,
39        args: &Args,
40        _tag: PhantomData<TagA>,
41    ) -> Result<Self::Parsed, App::Error> {
42        Ok(args.get_field(PhantomData).clone())
43    }
44}