+ use clap::{Parser, ValueHint};
+ use std::path::{Path, PathBuf};
+
+ #[derive(Parser, Debug)]
+ pub struct RepoPath {
+ /// Work with the repository at PATH instead of the one containing the current directory.
+ #[clap(long = "repository", value_name = "PATH", value_hint = ValueHint::DirPath)]
+ repo_path: Option<PathBuf>,
+ }
+
+ #[derive(Parser, Debug)]
+ pub struct RepoAndChannel {
+ #[clap(flatten)]
+ base: RepoPath,
+ /// Work with CHANNEL instead of the current channel
+ #[clap(long = "channel")]
+ channel: Option<String>,
+ }
+
+ impl RepoPath {
+ pub fn repo_path(&self) -> Option<&Path> {
+ self.repo_path.as_deref()
+ }
+ }
+
+ impl RepoAndChannel {
+ pub fn repo_path(&self) -> Option<&Path> {
+ self.base.repo_path()
+ }
+
+ pub fn channel(&self) -> Option<&str> {
+ self.channel.as_deref()
+ }
+ }