use std::path::Path; use serde::Serialize; use crate::config::Config; use crate::error::CustomError; use crate::intermediate::IObject; use super::plain_text::RenderPlainText; use super::target::RenderTarget; #[derive(Debug, Serialize)] #[serde(untagged)] pub(crate) enum RenderObject { PlainText(RenderPlainText), Target(RenderTarget), } impl RenderObject { pub(crate) fn new, F: AsRef>( config: &Config, output_directory: D, output_file: F, object: &IObject, ) -> Result { match object { IObject::PlainText(inner) => Ok(RenderObject::PlainText(RenderPlainText::new( config, output_directory, output_file, inner, )?)), IObject::Target(inner) => Ok(RenderObject::Target(RenderTarget::new( config, output_directory, output_file, inner, )?)), } } }