use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct IndexStats {
pub document_count: usize,
pub error_count: usize,
pub link_count: usize,
pub heading_count: usize,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ScanResult {
pub total_files: usize,
pub added: usize,
pub modified: usize,
pub deleted: usize,
pub parse_failures: usize,
pub broken_links: usize,
pub total_links: usize,
pub duration_secs: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ProcessChangesResult {
pub files_added: usize,
pub files_modified: usize,
pub files_deleted: usize,
pub parse_failures: usize,
pub broken_links: usize,
pub total_links: usize,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct LimitError {
pub limit_name: String,
pub limit_value: String,
pub actual_value: Option<String>,
pub message: String,
pub code: String,
}
impl LimitError {
pub fn new(limit_name: &str, limit_value: &str, message: &str) -> Self {
Self {
limit_name: limit_name.to_string(),
limit_value: limit_value.to_string(),
actual_value: None,
message: message.to_string(),
code: format!("LIMIT_EXCEEDED_{}", limit_name.to_uppercase()),
}
}
pub fn with_actual(mut self, actual: &str) -> Self {
self.actual_value = Some(actual.to_string());
self
}
}
impl std::fmt::Display for LimitError {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(
f,
"{} (limit: {}, code: {})",
self.message, self.limit_value, self.code
)
}
}
impl std::error::Error for LimitError {}