use crate::error::RenderError;
use crate::quill::Quill;
use crate::{LiveSession, OutputFormat};
pub trait Backend: Send + Sync + std::fmt::Debug {
fn id(&self) -> &'static str;
fn supported_formats(&self) -> &'static [OutputFormat];
fn open(
&self,
source: &Quill,
json_data: &serde_json::Value,
) -> Result<LiveSession, RenderError>;
}
pub fn formats_support_canvas(formats: &[OutputFormat]) -> bool {
formats
.iter()
.any(|f| matches!(f, OutputFormat::Png | OutputFormat::Svg))
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn formats_support_canvas_keys_off_visual_formats() {
use OutputFormat::*;
assert!(formats_support_canvas(&[Pdf, Svg, Png]));
assert!(formats_support_canvas(&[Pdf, Svg]));
assert!(formats_support_canvas(&[Png]));
assert!(!formats_support_canvas(&[Pdf]));
assert!(!formats_support_canvas(&[Txt]));
assert!(!formats_support_canvas(&[]));
}
}