Skip to main content

stellar_registry_cli/
lib.rs

1#![allow(
2    clippy::missing_errors_doc,
3    clippy::must_use_candidate,
4    clippy::missing_panics_doc
5)]
6use std::path::Path;
7
8pub mod commands;
9pub mod github;
10
11pub use commands::Error;
12pub use commands::Root;
13
14pub fn parse_cmd<T>(s: &str) -> Result<T, clap::Error>
15where
16    T: clap::CommandFactory + clap::FromArgMatches,
17{
18    let input = shlex::split(s).ok_or_else(|| {
19        clap::Error::raw(
20            clap::error::ErrorKind::InvalidValue,
21            format!("Invalid input for command:\n{s}"),
22        )
23    })?;
24    T::from_arg_matches_mut(&mut T::command().no_binary_name(true).get_matches_from(input))
25}
26
27pub trait CommandParser<T> {
28    fn parse(s: &str) -> Result<T, clap::Error>;
29
30    fn parse_arg_vec(s: &[&str]) -> Result<T, clap::Error>;
31}
32
33impl<T> CommandParser<T> for T
34where
35    T: clap::CommandFactory + clap::FromArgMatches,
36{
37    fn parse(s: &str) -> Result<T, clap::Error> {
38        parse_cmd(s)
39    }
40
41    fn parse_arg_vec(args: &[&str]) -> Result<T, clap::Error> {
42        T::from_arg_matches_mut(&mut T::command().no_binary_name(true).get_matches_from(args))
43    }
44}
45
46pub trait Pwd {
47    fn set_pwd(&mut self, pwd: &Path);
48}