steamroom-client 0.1.0

High-level Steam depot download orchestration and delta patching
Documentation
use std::collections::HashMap;
use std::path::Path;
use std::path::PathBuf;

#[derive(Clone, Debug, Default, serde::Serialize, serde::Deserialize)]
pub struct TokenStore {
    pub tokens: HashMap<String, String>,
}

impl TokenStore {
    pub fn default_path() -> PathBuf {
        dirs_next::home_dir()
            .unwrap_or_else(|| PathBuf::from("."))
            .join(".depotdownloader")
            .join("tokens.json")
    }

    pub fn load(path: &Path) -> Result<Self, std::io::Error> {
        let data = std::fs::read_to_string(path)?;
        serde_json::from_str(&data)
            .map_err(|e| std::io::Error::new(std::io::ErrorKind::InvalidData, e))
    }

    pub fn save(&self, path: &Path) -> Result<(), std::io::Error> {
        if let Some(parent) = path.parent() {
            std::fs::create_dir_all(parent)?;
        }
        let json = serde_json::to_string_pretty(self).map_err(std::io::Error::other)?;
        std::fs::write(path, json)
    }

    pub fn get(&self, account: &str) -> Option<&str> {
        self.tokens.get(account).map(|s| s.as_str())
    }

    pub fn set(&mut self, account: String, token: String) {
        self.tokens.insert(account, token);
    }
}