call_coding_clis/
sugar.rs1use crate::invoke::Error;
2use crate::invoke::Request;
3use crate::parser::{parse_args, resolve_command_warnings, CccConfig};
4
5#[derive(Clone, Debug, PartialEq, Eq)]
6pub struct ParsedRequest {
7 pub request: Request,
8 pub warnings: Vec<String>,
9}
10
11pub fn parse_tokens<I, S>(tokens: I) -> Result<ParsedRequest, Error>
12where
13 I: IntoIterator<Item = S>,
14 S: Into<String>,
15{
16 parse_tokens_with_config(tokens, &CccConfig::default())
17}
18
19pub fn parse_tokens_with_config<I, S>(tokens: I, config: &CccConfig) -> Result<ParsedRequest, Error>
20where
21 I: IntoIterator<Item = S>,
22 S: Into<String>,
23{
24 let argv: Vec<String> = tokens.into_iter().map(Into::into).collect();
25 let parsed = parse_args(&argv);
26 let request = Request::from_parsed_args(&parsed).map_err(Error::InvalidRequest)?;
27 let warnings =
28 resolve_command_warnings(&parsed, Some(config)).map_err(Error::InvalidRequest)?;
29
30 Ok(ParsedRequest { request, warnings })
31}