mita 0.0.1

Mita client - CLI and library for Mita monitoring system
Documentation
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
use std::fs;
use std::path::PathBuf;

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

impl TokenStore {
    pub fn insert_new_token(&mut self, url: &str, token: String) {
        self.tokens.insert(url.to_string(), token);
        self.last_url = Some(url.to_string());
    }
}

fn token_file() -> PathBuf {
    let base = match dirs::home_dir() {
        Some(dir) => dir,
        None => {
            eprintln!("[Mita] Home directory not found, using current directory for token file");
            PathBuf::from(".")
        }
    };
    base.join(".mita.json")
}

pub fn load_token_store() -> TokenStore {
    let path = token_file();
    if let Ok(s) = fs::read_to_string(path) {
        match serde_json::from_str(&s) {
            Ok(store) => store,
            Err(e) => {
                eprintln!("[Mita] Failed to deserialize token file: {e}");
                TokenStore::default()
            }
        }
    } else {
        TokenStore::default()
    }
}

pub fn save_token_store(store: &TokenStore) {
    let path = token_file();
    match serde_json::to_string_pretty(store) {
        Ok(json) => {
            if let Err(e) = fs::write(&path, json) {
                eprintln!("[Mita] Failed to write token file: {e}");
            }
        }
        Err(e) => {
            eprintln!("[Mita] Failed to serialize token store: {e}");
        }
    }
}