Skip to main content

call_coding_clis/
sugar.rs

1use 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}