use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
#[serde(default)]
pub struct PromptConfig {
pub format: String,
pub continuation: String,
pub shell_format: String,
pub mode_indicator: ModeIndicatorPosition,
pub indicators: Indicators,
pub status: StatusConfig,
pub vi: ViConfig,
}
impl Default for PromptConfig {
fn default() -> Self {
PromptConfig {
format: "{status}R {version}> ".to_string(),
continuation: "+ ".to_string(),
shell_format: "[{shell}] $ ".to_string(),
mode_indicator: ModeIndicatorPosition::default(),
indicators: Indicators::default(),
status: StatusConfig::default(),
vi: ViConfig::default(),
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
#[serde(default)]
pub struct StatusSymbol {
#[serde(default)]
pub success: String,
#[serde(default = "default_error_symbol")]
pub error: String,
}
fn default_error_symbol() -> String {
"✗ ".to_string()
}
impl Default for StatusSymbol {
fn default() -> Self {
Self {
success: String::new(),
error: default_error_symbol(),
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
#[serde(default)]
#[derive(Default)]
pub struct StatusConfig {
#[serde(default)]
pub symbol: StatusSymbol,
pub override_prompt_color: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
#[serde(default)]
pub(crate) struct ViSymbol {
#[serde(default = "default_vi_insert_symbol")]
pub insert: String,
#[serde(default = "default_vi_normal_symbol")]
pub normal: String,
#[serde(default)]
pub non_vi: String,
}
fn default_vi_insert_symbol() -> String {
"[I] ".to_string()
}
fn default_vi_normal_symbol() -> String {
"[N] ".to_string()
}
impl Default for ViSymbol {
fn default() -> Self {
Self {
insert: default_vi_insert_symbol(),
normal: default_vi_normal_symbol(),
non_vi: String::new(),
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema, Default)]
#[serde(default)]
pub struct ViConfig {
#[serde(default)]
pub symbol: ViSymbol,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "lowercase")]
#[derive(Default)]
pub enum ModeIndicatorPosition {
#[default]
Prefix,
Suffix,
None,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
#[serde(default)]
pub struct Indicators {
pub reprex: String,
pub reprex_format: String,
}
impl Default for Indicators {
fn default() -> Self {
Self {
reprex: "[reprex] ".to_string(),
reprex_format: "[format] ".to_string(),
}
}
}