rpc_toolkit_macro_internals/run_cli/
parse.rs

1use syn::parse::{Parse, ParseStream};
2
3use super::*;
4
5impl Parse for MakeCtx {
6    fn parse(input: ParseStream) -> Result<Self> {
7        let matches_ident = input.parse()?;
8        let _: token::FatArrow = input.parse()?;
9        let body = input.parse()?;
10        Ok(MakeCtx {
11            matches_ident,
12            body,
13        })
14    }
15}
16
17impl Parse for MutApp {
18    fn parse(input: ParseStream) -> Result<Self> {
19        let app_ident = input.parse()?;
20        let _: token::FatArrow = input.parse()?;
21        let body = input.parse()?;
22        Ok(MutApp { app_ident, body })
23    }
24}
25
26impl Parse for RunCliArgs {
27    fn parse(input: ParseStream) -> Result<Self> {
28        let args;
29        braced!(args in input);
30        let mut command = None;
31        let mut mut_app = None;
32        let mut make_ctx = None;
33        let mut parent_data = None;
34        let mut exit_fn = None;
35        while !args.is_empty() {
36            let arg_name: syn::Ident = args.parse()?;
37            let _: token::Colon = args.parse()?;
38            match arg_name.to_string().as_str() {
39                "command" => {
40                    command = Some(args.parse()?);
41                }
42                "app" => {
43                    mut_app = Some(args.parse()?);
44                }
45                "context" => {
46                    make_ctx = Some(args.parse()?);
47                }
48                "parent_data" => {
49                    parent_data = Some(args.parse()?);
50                }
51                "exit" => {
52                    exit_fn = Some(args.parse()?);
53                }
54                _ => return Err(Error::new(arg_name.span(), "unknown argument")),
55            }
56            if !args.is_empty() {
57                let _: token::Comma = args.parse()?;
58            }
59        }
60        Ok(RunCliArgs {
61            command: command.expect("`command` is required"),
62            mut_app,
63            make_ctx,
64            parent_data,
65            exit_fn,
66        })
67    }
68}