use std::fs;
use crate::{Error, Job, Result};
pub fn to_png(job: &Job) -> Result<()> {
let svg = fs::read(job.input)?;
let tree = usvg::Tree::from_data(&svg, &usvg::Options::default())
.map_err(|e| Error::other(format!("svg parse: {e}")))?;
let size = tree.size().to_int_size();
let mut pixmap = tiny_skia::Pixmap::new(size.width(), size.height())
.ok_or_else(|| Error::other("svg: failed to allocate pixmap"))?;
resvg::render(&tree, tiny_skia::Transform::default(), &mut pixmap.as_mut());
pixmap
.save_png(job.output)
.map_err(|e| Error::other(format!("png write: {e}")))?;
Ok(())
}
pub fn to_pdf(job: &Job) -> Result<()> {
let svg = fs::read_to_string(job.input)?;
let options = svg2pdf::usvg::Options::default();
let tree = svg2pdf::usvg::Tree::from_str(&svg, &options)
.map_err(|e| Error::other(format!("svg parse: {e}")))?;
let conv_opts = svg2pdf::ConversionOptions::default();
let page_opts = svg2pdf::PageOptions::default();
let pdf = svg2pdf::to_pdf(&tree, conv_opts, page_opts)
.map_err(|e| Error::other(format!("svg2pdf: {e}")))?;
fs::write(job.output, pdf)?;
Ok(())
}