Skip to main content

tracevault_cli/
credentials.rs

1use serde::{Deserialize, Serialize};
2use std::fs;
3use std::path::PathBuf;
4
5#[derive(Debug, Serialize, Deserialize)]
6pub struct Credentials {
7    pub server_url: String,
8    pub token: String,
9    pub email: String,
10}
11
12impl Credentials {
13    pub fn path() -> PathBuf {
14        dirs::config_dir()
15            .unwrap_or_else(|| PathBuf::from("~/.config"))
16            .join("tracevault")
17            .join("credentials.json")
18    }
19
20    pub fn load() -> Option<Self> {
21        let path = Self::path();
22        let content = fs::read_to_string(&path).ok()?;
23        serde_json::from_str(&content).ok()
24    }
25
26    pub fn save(&self) -> Result<(), std::io::Error> {
27        let path = Self::path();
28        if let Some(parent) = path.parent() {
29            fs::create_dir_all(parent)?;
30        }
31        let json = serde_json::to_string_pretty(self).map_err(std::io::Error::other)?;
32        fs::write(&path, json)
33    }
34
35    pub fn delete() -> Result<(), std::io::Error> {
36        let path = Self::path();
37        if path.exists() {
38            fs::remove_file(&path)?;
39        }
40        Ok(())
41    }
42}