use crate::util::Utf16String;
use crate::{IEngineConfiguration, TemplateResolutionAttributes};
use super::{TemplateResolution, TemplateResolverError};
pub trait ITemplateResolver: Send + Sync {
fn get_name(&self) -> Option<&Utf16String>;
fn get_order(&self) -> Option<i32>;
fn resolve_template(
&self,
configuration: &dyn IEngineConfiguration,
owner_template: Option<&Utf16String>,
template: &Utf16String,
template_resolution_attributes: Option<&TemplateResolutionAttributes>,
) -> Result<Option<TemplateResolution>, TemplateResolverError>;
fn resolve_template_nullable(
&self,
configuration: Option<&dyn IEngineConfiguration>,
owner_template: Option<&Utf16String>,
template: Option<&Utf16String>,
template_resolution_attributes: Option<&TemplateResolutionAttributes>,
) -> Result<Option<TemplateResolution>, TemplateResolverError> {
let configuration = configuration.ok_or_else(|| {
TemplateResolverError::InvalidArgument("Engine Configuration cannot be null".to_owned())
})?;
let template = template.ok_or_else(|| {
TemplateResolverError::InvalidArgument("Template Name cannot be null".to_owned())
})?;
self.resolve_template(
configuration,
owner_template,
template,
template_resolution_attributes,
)
}
}