use std::collections::BTreeMap;
use std::path::PathBuf;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Scope {
Project,
Session,
Global,
System,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct ResolvedToolVersion {
pub plugin: String,
pub version: String,
pub scope: Scope,
pub source: PathBuf,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct HomeLayout {
pub active_home: PathBuf,
pub migration_candidates: Vec<PathBuf>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
#[serde(default, rename_all = "camelCase")]
pub struct AppConfig {
pub proxy: ProxyConfig,
pub storage: StorageConfig,
pub registry: RegistryConfig,
pub legacy_version_file: LegacyVersionFileConfig,
pub cache: CacheConfig,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
#[serde(default, rename_all = "camelCase")]
pub struct ProxyConfig {
pub enable: bool,
pub url: String,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
#[serde(default, rename_all = "camelCase")]
pub struct StorageConfig {
pub sdk_path: String,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
#[serde(default, rename_all = "camelCase")]
pub struct RegistryConfig {
pub address: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(default, rename_all = "camelCase")]
pub struct LegacyVersionFileConfig {
pub enable: bool,
pub strategy: String,
}
impl Default for LegacyVersionFileConfig {
fn default() -> Self {
Self {
enable: true,
strategy: String::from("specified"),
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(default, rename_all = "camelCase")]
pub struct CacheConfig {
pub available_hook_duration: String,
}
impl Default for CacheConfig {
fn default() -> Self {
Self {
available_hook_duration: String::from("12h"),
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize, Default, PartialEq, Eq)]
pub struct ToolVersions {
#[serde(default)]
pub tools: BTreeMap<String, String>,
}