pub mod go;
pub mod downloader;
pub mod symlink;
pub use go::GoVersionInfo;
use std::path::PathBuf;
pub enum Runtime {
Go,
}
#[derive(Debug, Clone)]
pub struct VersionInfo {
pub version: String,
pub install_path: PathBuf,
}
#[derive(Debug, Clone)]
pub struct InstallRequest {
pub version: String,
pub install_dir: PathBuf,
pub download_dir: PathBuf,
pub force: bool,
}
#[derive(Debug, Clone)]
pub struct SwitchRequest {
pub version: String,
pub base_dir: PathBuf,
pub global: bool,
pub force: bool,
}
#[derive(Debug, Clone)]
pub struct UninstallRequest {
pub version: String,
pub base_dir: PathBuf,
}
#[derive(Debug, Clone)]
pub struct ListInstalledRequest {
pub base_dir: PathBuf,
}
#[derive(Debug, Clone)]
pub struct StatusRequest {
pub base_dir: Option<PathBuf>,
}
#[derive(Debug, Clone)]
pub struct RuntimeStatus {
pub current_version: Option<String>,
pub install_path: Option<PathBuf>,
pub environment_vars: std::collections::HashMap<String, String>,
pub link_info: Option<String>,
}
#[derive(Debug, Clone)]
pub struct VersionList {
pub versions: Vec<String>,
pub total_count: usize,
}
#[async_trait::async_trait]
pub trait VersionManager {
async fn install(&self, request: InstallRequest) -> Result<VersionInfo, String>;
fn switch_to(&self, request: SwitchRequest) -> Result<(), String>;
fn uninstall(&self, request: UninstallRequest) -> Result<(), String>;
fn list_installed(&self, request: ListInstalledRequest) -> Result<VersionList, String>;
async fn list_available(&self) -> Result<VersionList, String>;
fn status(&self, request: StatusRequest) -> Result<RuntimeStatus, String>;
}