fundaia 0.55.0

Command line for the Fundaia deployment platform: projects, services, variables, deployments, logs and metrics
use super::*;

impl ApiClient {
    pub async fn variables(&self, service_environment_id: &str) -> Result<Vec<Variable>> {
        Ok(self
            .get::<VariablesPage>(&format!(
                "/api/infra/services/{service_environment_id}/variables"
            ))
            .await?
            .variables)
    }

    pub async fn set_variable(
        &self,
        service_environment_id: &str,
        key: &str,
        value: &str,
        secret: bool,
        sealed: bool,
    ) -> Result<()> {
        let _: serde_json::Value = self
            .put(
                &self.released(&format!(
                    "/api/infra/services/{service_environment_id}/variables"
                )),
                &serde_json::json!({
                    "key": key,
                    "value": value,
                    "secret": secret,
                    "sealed": sealed,
                }),
            )
            .await?;
        Ok(())
    }

    pub async fn seal_variable(&self, variable_id: &str) -> Result<()> {
        let _: serde_json::Value = self
            .post_empty(&self.released(&format!("/api/infra/variables/{variable_id}/seal")))
            .await?;
        Ok(())
    }

    pub async fn remove_variable(&self, variable_id: &str) -> Result<()> {
        self.delete(&self.released(&format!("/api/infra/variables/{variable_id}")))
            .await
    }

    pub async fn reveal_variable(&self, variable_id: &str) -> Result<String> {
        Ok(self
            .post_empty::<RevealedVariable>(&format!("/api/infra/variables/{variable_id}/reveal"))
            .await?
            .value)
    }

    pub async fn import_variables(
        &self,
        service_environment_id: &str,
        variables: &[VariableDraft],
    ) -> Result<u32> {
        let imported: ImportedVariables = self
            .post(
                &self.released(&format!(
                    "/api/infra/services/{service_environment_id}/variables/import"
                )),
                &serde_json::json!({ "variables": variables }),
            )
            .await?;

        Ok(match imported.imported {
            0 => variables.len() as u32,
            counted => counted,
        })
    }
}