use super::super::Context;
use super::super::args;
use crate::boundary::Action;
use crate::boundary::config::{Read, Write};
use crate::boundary::{Gesture, Query};
use crate::proposals::{Settle, Verdict};
pub(super) fn proposals(tail: &str, ctx: &Context, verb: &str) -> Result<Gesture, String> {
let id = match tail.split_whitespace().collect::<Vec<_>>()[..] {
[] => None,
[id] => Some(id.to_owned()),
_ => return Err(format!("/{verb}: usage: /{verb} [<proposal-id>]")),
};
Ok(Gesture::Ask(Query::Config(Read::Proposals {
workspace: args::workspace(ctx, verb)?,
id,
})))
}
pub(super) fn proposal(tail: &str, ctx: &Context, verb: &str) -> Result<Gesture, String> {
let usage = || format!("/{verb}: usage: /{verb} <proposal-id> <accept|reject>");
let [id, word] = *tail.split_whitespace().collect::<Vec<_>>() else {
return Err(usage());
};
let verdict = Verdict::parse(word).ok_or_else(usage)?;
Ok(Gesture::Act(Action::Config(Write::Proposal(Settle {
workspace: args::workspace(ctx, verb)?,
id: id.to_owned(),
verdict,
}))))
}