diff --git a/src/cli/mod.rs b/src/cli/mod.rs index c51bb95d..f8da43ad 100644 --- a/src/cli/mod.rs +++ b/src/cli/mod.rs @@ -26,6 +26,24 @@ pub struct Root { cmd: Cmd, } +impl Root { + /// Run the CLIs root command. + /// + /// ## Errors + /// + /// If the root command is configured with state that is invalid. + pub fn run(&self) -> Result<(), Error> { + match &self.cmd { + Cmd::Types(c) => c.run(&self.channel), + Cmd::Guess(c) => c.run(&self.channel)?, + Cmd::Decode(c) => c.run(&self.channel)?, + Cmd::Encode(c) => c.run(&self.channel)?, + Cmd::Version => version::Cmd::run(), + } + Ok(()) + } +} + #[derive(ValueEnum, Debug, Clone)] pub enum Channel { #[value(name = "+curr")] @@ -78,12 +96,5 @@ where T: Into + Clone, { let root = Root::try_parse_from(args)?; - match root.cmd { - Cmd::Types(c) => c.run(&root.channel), - Cmd::Guess(c) => c.run(&root.channel)?, - Cmd::Decode(c) => c.run(&root.channel)?, - Cmd::Encode(c) => c.run(&root.channel)?, - Cmd::Version => version::Cmd::run(), - } - Ok(()) + root.run() }