use serde::{Deserialize, Serialize};
use serde_json::Value as JsonValue;
use std::collections::HashMap;
pub mod markdown;
pub use markdown::MarkdownProcessor;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ProcessorConfig {
#[serde(default = "default_true")]
pub validate: bool,
#[serde(default = "default_true")]
pub sanitize: bool,
#[serde(default)]
pub options: HashMap<String, JsonValue>,
}
impl Default for ProcessorConfig {
fn default() -> Self {
Self {
validate: true,
sanitize: true,
options: HashMap::new(),
}
}
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct ContentMetadata {
pub title: Option<String>,
pub description: Option<String>,
pub date: Option<String>,
pub tags: Vec<String>,
pub custom: HashMap<String, JsonValue>,
}
fn default_true() -> bool {
true
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_processor_config_defaults() {
let config = ProcessorConfig::default();
assert!(config.validate);
assert!(config.sanitize);
assert!(config.options.is_empty());
}
#[test]
fn test_content_metadata_defaults() {
let metadata = ContentMetadata::default();
assert!(metadata.title.is_none());
assert!(metadata.description.is_none());
assert!(metadata.date.is_none());
assert!(metadata.tags.is_empty());
assert!(metadata.custom.is_empty());
}
}