use nu_ansi_term::Color;
use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(default)]
pub(super) struct SpinnerConfigSchema {
pub frames: String,
pub color: String,
}
impl Default for SpinnerConfigSchema {
fn default() -> Self {
SpinnerConfigSchema {
frames: String::new(),
color: "Cyan".to_string(),
}
}
}
impl JsonSchema for SpinnerConfigSchema {
fn schema_name() -> std::borrow::Cow<'static, str> {
std::borrow::Cow::Borrowed("SpinnerConfigSchema")
}
fn json_schema(_generator: &mut schemars::SchemaGenerator) -> schemars::Schema {
use crate::config::colors::color_prop;
schemars::json_schema!({
"type": "object",
"description": "Spinner configuration for busy indicator during R execution.",
"properties": {
"frames": {
"type": "string",
"description": r#"Spinner animation frames as a string where each character is one frame. Empty string disables the spinner. Example: "⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏" (braille dots), "|/-\\" (ASCII spinner)."#,
"default": ""
},
"color": color_prop!("Color for the spinner.", default = "Cyan")
}
})
}
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
#[serde(default)]
pub struct PromptDurationConfig {
#[serde(default = "default_duration_format")]
pub format: String,
#[serde(default = "default_duration_threshold_ms")]
pub threshold_ms: u64,
}
fn default_duration_format() -> String {
"{value} ".to_string()
}
fn default_duration_threshold_ms() -> u64 {
2000
}
impl Default for PromptDurationConfig {
fn default() -> Self {
Self {
format: default_duration_format(),
threshold_ms: default_duration_threshold_ms(),
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(default)]
pub struct SpinnerConfig {
#[serde(default = "default_spinner_frames")]
pub frames: String,
#[serde(default = "default_spinner_color")]
pub color: Color,
}
fn default_spinner_frames() -> String {
String::new() }
fn default_spinner_color() -> Color {
Color::Cyan
}
impl Default for SpinnerConfig {
fn default() -> Self {
Self {
frames: default_spinner_frames(),
color: default_spinner_color(),
}
}
}