use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use std::path::PathBuf;
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
#[serde(default)]
pub struct StartupConfig {
#[serde(default)]
pub r_source: RSource,
#[serde(default = "default_true")]
pub show_banner: bool,
#[serde(default)]
pub mode: StartupModeConfig,
}
fn default_true() -> bool {
true
}
impl Default for StartupConfig {
fn default() -> Self {
StartupConfig {
r_source: RSource::default(),
show_banner: true,
mode: StartupModeConfig::default(),
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
#[serde(default)]
#[derive(Default)]
pub struct StartupModeConfig {
pub reprex: bool,
pub autoformat: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
#[serde(untagged)]
pub enum RSource {
Mode(RSourceMode),
Path {
path: PathBuf,
},
}
impl Default for RSource {
fn default() -> Self {
RSource::Mode(RSourceMode::Auto)
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "lowercase")]
pub enum RSourceMode {
Auto,
Rig,
}
#[derive(Debug, Clone, Default)]
pub enum RSourceStatus {
Rig {
version: String,
},
#[default]
Path,
ExplicitPath {
path: PathBuf,
},
}
impl RSourceStatus {
pub fn rig_enabled(&self) -> bool {
matches!(self, RSourceStatus::Rig { .. })
}
pub fn display(&self) -> String {
match self {
RSourceStatus::Rig { version } => format!("rig (R {})", version),
RSourceStatus::Path => "PATH".to_string(),
RSourceStatus::ExplicitPath { path } => format!("path ({})", path.display()),
}
}
}