diff options
| author | David Lönnhager <david.l@mullvad.net> | 2023-03-28 17:10:10 +0200 |
|---|---|---|
| committer | David Lönnhager <david.l@mullvad.net> | 2023-05-03 10:20:52 +0200 |
| commit | e13b475d7cec89b564bd5c896ac24f7ca2596caf (patch) | |
| tree | e360a32d42c5ba9a2f07b9331c7cb9aba0d666cc /mullvad-cli/src/cmds/beta_program.rs | |
| parent | beaa6d3b80d9c9dfed99c710c793830db3ddc7ec (diff) | |
| download | mullvadvpn-e13b475d7cec89b564bd5c896ac24f7ca2596caf.tar.xz mullvadvpn-e13b475d7cec89b564bd5c896ac24f7ca2596caf.zip | |
And gRPC interface wrapper and refactor CLI to use clap derive instead of the builder
Diffstat (limited to 'mullvad-cli/src/cmds/beta_program.rs')
| -rw-r--r-- | mullvad-cli/src/cmds/beta_program.rs | 92 |
1 files changed, 42 insertions, 50 deletions
diff --git a/mullvad-cli/src/cmds/beta_program.rs b/mullvad-cli/src/cmds/beta_program.rs index 77aa73ace3..891599b733 100644 --- a/mullvad-cli/src/cmds/beta_program.rs +++ b/mullvad-cli/src/cmds/beta_program.rs @@ -1,61 +1,53 @@ -use crate::{new_rpc_client, Command, Error, Result}; +use clap::Subcommand; +use mullvad_management_interface::MullvadProxyClient; -pub struct BetaProgram; +use super::on_off_parser; +use crate::{Error, Result}; -#[mullvad_management_interface::async_trait] -impl Command for BetaProgram { - fn name(&self) -> &'static str { - "beta-program" - } +#[derive(Subcommand, Debug)] +pub enum BetaProgram { + /// Get beta notifications setting + Get, + /// Change beta notifications setting + Set { + #[arg(value_parser = on_off_parser())] + policy: bool, + }, +} - fn clap_subcommand(&self) -> clap::App<'static> { - clap::App::new(self.name()) - .about("Receive notifications about beta updates") - .setting(clap::AppSettings::SubcommandRequiredElseHelp) - .subcommand( - clap::App::new("set") - .about("Change beta notifications setting") - .arg( - clap::Arg::new("policy") - .required(true) - .possible_values(["on", "off"]), - ), - ) - .subcommand(clap::App::new("get").about("Get beta notifications setting")) +impl BetaProgram { + pub async fn handle(self) -> Result<()> { + match self { + BetaProgram::Get => Self::get().await, + BetaProgram::Set { policy } => Self::set(policy).await, + } } - async fn run(&self, matches: &clap::ArgMatches) -> Result<()> { - match matches.subcommand() { - Some(("get", _)) => { - let mut rpc = new_rpc_client().await?; - let settings = rpc.get_settings(()).await?.into_inner(); - let enabled_str = if settings.show_beta_releases { - "on" - } else { - "off" - }; - println!("Beta program: {enabled_str}"); - Ok(()) - } - Some(("set", matches)) => { - let enable_str = matches.value_of("policy").expect("missing policy"); - let enable = enable_str == "on"; + async fn set(enable: bool) -> Result<()> { + if !enable && mullvad_version::VERSION.contains("beta") { + return Err(Error::InvalidCommand( + "The beta program must be enabled while running a beta version", + )); + } - if !enable && mullvad_version::VERSION.contains("beta") { - return Err(Error::InvalidCommand( - "The beta program must be enabled while running a beta version", - )); - } + let mut rpc = MullvadProxyClient::new().await?; + rpc.set_show_beta_releases(enable).await?; - let mut rpc = new_rpc_client().await?; - rpc.set_show_beta_releases(enable).await?; + if enable { + println!("Beta program: on"); + } else { + println!("Beta program: off"); + } + Ok(()) + } - println!("Beta program: {enable_str}"); - Ok(()) - } - _ => { - unreachable!("unhandled command"); - } + async fn get() -> Result<()> { + let mut rpc = MullvadProxyClient::new().await?; + if rpc.get_settings().await?.show_beta_releases { + println!("Beta program: on"); + } else { + println!("Beta program: off"); } + Ok(()) } } |
