summaryrefslogtreecommitdiffhomepage
path: root/mullvad-cli/src/cmds/beta_program.rs
diff options
context:
space:
mode:
authorDavid Lönnhager <david.l@mullvad.net>2023-03-28 17:10:10 +0200
committerDavid Lönnhager <david.l@mullvad.net>2023-05-03 10:20:52 +0200
commite13b475d7cec89b564bd5c896ac24f7ca2596caf (patch)
treee360a32d42c5ba9a2f07b9331c7cb9aba0d666cc /mullvad-cli/src/cmds/beta_program.rs
parentbeaa6d3b80d9c9dfed99c710c793830db3ddc7ec (diff)
downloadmullvadvpn-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.rs92
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(())
}
}