#[derive(Clone, Debug)]
pub struct Web2PptConfig {
pub max_slides: usize,
pub max_bullets_per_slide: usize,
pub include_images: bool,
pub include_tables: bool,
pub include_code: bool,
pub user_agent: String,
pub timeout_secs: u64,
pub title_font_size: u32,
pub content_font_size: u32,
pub extract_links: bool,
pub group_by_headings: bool,
}
impl Default for Web2PptConfig {
fn default() -> Self {
Web2PptConfig {
max_slides: 20,
max_bullets_per_slide: 6,
include_images: true,
include_tables: true,
include_code: true,
user_agent: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36".to_string(),
timeout_secs: 30,
title_font_size: 44,
content_font_size: 24,
extract_links: true,
group_by_headings: true,
}
}
}
impl Web2PptConfig {
pub fn new() -> Self {
Self::default()
}
pub fn max_slides(mut self, max: usize) -> Self {
self.max_slides = max;
self
}
pub fn max_bullets(mut self, max: usize) -> Self {
self.max_bullets_per_slide = max;
self
}
pub fn with_images(mut self, include: bool) -> Self {
self.include_images = include;
self
}
pub fn with_tables(mut self, include: bool) -> Self {
self.include_tables = include;
self
}
pub fn with_code(mut self, include: bool) -> Self {
self.include_code = include;
self
}
pub fn user_agent(mut self, ua: &str) -> Self {
self.user_agent = ua.to_string();
self
}
pub fn timeout(mut self, secs: u64) -> Self {
self.timeout_secs = secs;
self
}
pub fn title_size(mut self, size: u32) -> Self {
self.title_font_size = size;
self
}
pub fn content_size(mut self, size: u32) -> Self {
self.content_font_size = size;
self
}
pub fn with_links(mut self, extract: bool) -> Self {
self.extract_links = extract;
self
}
pub fn group_by_headings(mut self, group: bool) -> Self {
self.group_by_headings = group;
self
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_default_config() {
let config = Web2PptConfig::default();
assert_eq!(config.max_slides, 20);
assert_eq!(config.max_bullets_per_slide, 6);
assert!(config.include_images);
}
#[test]
fn test_config_builder() {
let config = Web2PptConfig::new()
.max_slides(10)
.max_bullets(4)
.with_images(false);
assert_eq!(config.max_slides, 10);
assert_eq!(config.max_bullets_per_slide, 4);
assert!(!config.include_images);
}
}