use serde::{Deserialize, Serialize};
use tatara_lisp::DeriveTataraDomain;
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct StatusSegment {
pub segment: String,
#[serde(default)]
pub highlight: String,
#[serde(default)]
pub format: String,
#[serde(default)]
pub prefix: String,
#[serde(default)]
pub suffix: String,
}
#[derive(DeriveTataraDomain, Serialize, Deserialize, Debug, Clone, Default, PartialEq, Eq)]
#[serde(rename_all = "camelCase")]
#[tatara(keyword = "defstatusline")]
pub struct StatusLineSpec {
#[serde(default)]
pub left: Vec<StatusSegment>,
#[serde(default)]
pub center: Vec<StatusSegment>,
#[serde(default)]
pub right: Vec<StatusSegment>,
}
impl StatusLineSpec {
#[must_use]
pub fn segment_count(&self) -> usize {
self.left.len() + self.center.len() + self.right.len()
}
}
pub const KNOWN_SEGMENTS: &[&str] = &[
"mode",
"branch",
"file",
"filetype",
"diagnostics",
"lsp",
"position",
"time",
"counts",
"encoding",
"fileformat",
"separator",
];
#[must_use]
pub fn is_known_segment(name: &str) -> bool {
KNOWN_SEGMENTS.iter().any(|s| *s == name)
}