Radish alpha
h
Radicle Heartwood Protocol & Stack
Radicle
Git (anonymous pull)
Log in to clone via SSH
REVIEW: Move state arguments for `rad issue list` to own arg group
Lorenz Leutgeb committed 7 months ago
commit 714313fd5bf626d0753617337a247fb4ef9a36c7
parent 07123fe9a944c9e8fadb22853b3c5eb52f979b47
2 files changed +30 -8
modified crates/radicle-cli/src/commands/issue.rs
@@ -199,7 +199,13 @@ pub fn run(args: Args, ctx: impl term::Context) -> anyhow::Result<()> {
        }
        Command::List(list_args) => {
            let assigned = list_args.assigned.clone();
-
            list(issues, &assigned, &list_args.into(), &profile, args.verbose)?;
+
            list(
+
                issues,
+
                &assigned,
+
                &list_args.state.unwrap_or_default().into(),
+
                &profile,
+
                args.verbose,
+
            )?;
        }
        Command::Delete { id } => {
            let id = id.resolve(&repo.backend)?;
modified crates/radicle-cli/src/commands/issue/args.rs
@@ -244,6 +244,13 @@ pub(crate) struct ListArgs {
    #[arg(num_args = 0..=1)]
    pub(crate) assigned: Option<Assigned>,

+
    #[clap(flatten)]
+
    pub(crate) state: Option<ListStateArgs>,
+
}
+

+
#[derive(Parser, Debug)]
+
#[group(id = "state", required = false, multiple = false)]
+
pub(crate) struct ListStateArgs {
    /// List all issues
    #[arg(long, group = "state")]
    all: bool,
@@ -261,8 +268,9 @@ pub(crate) struct ListArgs {
    solved: bool,
}

-
impl From<ListArgs> for Option<State> {
-
    fn from(args: ListArgs) -> Self {
+
impl From<ListStateArgs> for Option<State> {
+
    fn from(args: ListStateArgs) -> Self {
+
        // These are mutually exclusive, guaranteed by clap grouping.
        match (args.all, args.open, args.closed, args.solved) {
            (true, _, _, _) => None,
            (_, true, _, _) => Some(State::Open),
@@ -272,19 +280,27 @@ impl From<ListArgs> for Option<State> {
            (_, _, _, true) => Some(State::Closed {
                reason: CloseReason::Solved,
            }),
-
            _ => Some(State::Open),
+
            _ => unreachable!(),
        }
    }
}

+
impl Default for ListStateArgs {
+
    fn default() -> Self {
+
        Self { all: false, open: true, closed: false, solved: false }
+
    }
+
}
+

impl From<EmptyArgs> for ListArgs {
    fn from(args: EmptyArgs) -> Self {
        Self {
            assigned: args.assigned,
-
            all: args.all,
-
            open: args.open,
-
            solved: args.solved,
-
            closed: args.closed,
+
            state: Some(ListStateArgs {
+
                all: args.all,
+
                open: args.open,
+
                solved: args.solved,
+
                closed: args.closed,
+
            }),
        }
    }
}