hermes_cli_components/impls/parse/
field.rs1use 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}