use clap::{Args, ValueEnum};
use svugy::{InteractiveSvg, RenderSvg, SketchInteractiveSvg, SketchStaticSvg, StaticSvg};
use svugy_model::model::Model;
#[derive(Args, Clone, Copy)]
pub struct SvgFlavor {
#[arg(long, value_enum, default_value_t = RenderProfile::Interactive)]
profile: RenderProfile,
#[arg(long, value_enum, default_value_t = RenderTheme::Standard)]
theme: RenderTheme,
}
#[derive(Clone, Copy, ValueEnum)]
pub enum RenderProfile {
Interactive,
Static,
}
#[derive(Clone, Copy, ValueEnum)]
pub enum RenderTheme {
Standard,
Sketch,
}
impl SvgFlavor {
pub fn new(profile: RenderProfile, theme: RenderTheme) -> Self {
Self { profile, theme }
}
pub fn render(self, model: &Model) -> String {
match (self.profile, self.theme) {
(RenderProfile::Interactive, RenderTheme::Standard) => InteractiveSvg::render(model),
(RenderProfile::Interactive, RenderTheme::Sketch) => {
SketchInteractiveSvg::render(model)
}
(RenderProfile::Static, RenderTheme::Standard) => StaticSvg::render(model),
(RenderProfile::Static, RenderTheme::Sketch) => SketchStaticSvg::render(model),
}
}
}