secrets-sync 0.1.1

secret-sync, a rusty program
Documentation
use std::collections::{HashMap, HashSet};
use duct::cmd;
use crate::provider::SecretProvider;
use lazy_settings::settings;
use eyre::Result;

#[settings(key = "doppler")]
struct DopplerSettings {
    project: String,
    environment: String,
}

pub struct DopplerProvider {
    settings: DopplerSettings,
}

impl DopplerProvider {
    pub fn new(instance_name: &str) -> Result<Self> {
        Ok(Self {
            settings: DopplerSettings::get(instance_name)?
        })
    }
}

impl SecretProvider for DopplerProvider {
    fn get_keys(&self) -> Result<HashSet<String>> {
        Ok(self.get_all()?.into_keys().collect())
    }

    fn get_all(&self) -> Result<HashMap<String, String>> {
        let stdout = cmd!("doppler", "secrets", "-p", self.settings.project(), "download", "--no-fallback", "--no-cache", "--no-file", "-c", self.settings.environment()).read()?;
        let map: HashMap<String, String> = serde_json::from_str(&stdout)?;
        Ok(map)
    }

    fn set_all(&self, secrets: &HashMap<String, String>) -> Result<()> {
        todo!()
    }

    fn remove_keys(&self) -> Result<()> {
        todo!()
    }
}

#[cfg(test)]
mod test {
    use super::*;

    #[test]
    fn test_doppler() {
        let settings = DopplerSettings::get("test").unwrap();
        let provider = DopplerProvider {
            settings
        };
        dbg!(provider.get_all().unwrap());
    }
}