use std::fs::{self, File};
use std::io;
use std::io::prelude::*;
use std::path::Path;
use crate::canvas::Canvas;
pub mod bitmap;
pub mod svg;
pub trait Renderer {
fn render(&self, canvas: &Canvas) -> Vec<u8>;
}
pub fn save(canvas: &Canvas, path: &str, renderer: impl Renderer) -> io::Result<()> {
let path = Path::new(path);
if path.is_dir() {
panic!("Warning: Attempted to save file over an existing directory");
}
if path.parent().is_none() {
panic!("Failed to find parent directory")
}
let folder = path.parent().unwrap();
if !Path::exists(folder) {
fs::create_dir_all(folder)?;
}
let bytes = renderer.render(canvas);
let mut file = File::create(&path)?;
file.write_all(&bytes)?;
Ok(())
}