use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(default, deny_unknown_fields)]
pub struct PageConfig {
#[serde(default)]
pub extract_pages: bool,
#[serde(default)]
pub insert_page_markers: bool,
#[serde(default = "default_page_marker_format")]
pub marker_format: String,
}
impl Default for PageConfig {
fn default() -> Self {
Self {
extract_pages: false,
insert_page_markers: false,
marker_format: "\n\n<!-- PAGE {page_num} -->\n\n".to_string(),
}
}
}
fn default_page_marker_format() -> String {
"\n\n<!-- PAGE {page_num} -->\n\n".to_string()
}
pub(crate) fn marker_line_regex(marker_format: &str) -> regex::Regex {
let pattern = marker_format
.trim()
.split("{page_num}")
.map(regex::escape)
.collect::<Vec<_>>()
.join(r"\d+");
regex::Regex::new(&format!("^{pattern}$")).expect("escaped marker format is a valid regex")
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_page_config_default() {
let config = PageConfig::default();
assert!(!config.extract_pages);
assert!(!config.insert_page_markers);
assert_eq!(config.marker_format, "\n\n<!-- PAGE {page_num} -->\n\n");
}
}