summaryrefslogtreecommitdiffhomepage
path: root/mullvad-cli/src/cmds/beta_program.rs
blob: 29c69f96fe653d5283f424bc522e719eadc9c547 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
use anyhow::{Result, anyhow};
use clap::Subcommand;
use mullvad_management_interface::MullvadProxyClient;

use super::BooleanOption;

#[derive(Subcommand, Debug)]
pub enum BetaProgram {
    /// Get beta notifications setting
    Get,
    /// Change beta notifications setting
    Set { policy: BooleanOption },
}

impl BetaProgram {
    pub async fn handle(self) -> Result<()> {
        match self {
            BetaProgram::Get => Self::get().await,
            BetaProgram::Set { policy } => Self::set(policy).await,
        }
    }

    async fn set(state: BooleanOption) -> Result<()> {
        if !*state && mullvad_version::VERSION.contains("beta") {
            return Err(anyhow!(
                "The beta program must be enabled while running a beta version",
            ));
        }

        let mut rpc = MullvadProxyClient::new().await?;
        rpc.set_show_beta_releases(*state).await?;

        println!("Beta program: {state}");
        Ok(())
    }

    async fn get() -> Result<()> {
        let mut rpc = MullvadProxyClient::new().await?;
        let opt = BooleanOption::from(rpc.get_settings().await?.show_beta_releases);
        println!("Beta program: {opt}");
        Ok(())
    }
}