use std::sync::OnceLock;
use crate::context::ITemplateContext;
use crate::exceptions::TemplateProcessingException;
use crate::expression::StandardExpressionResult;
use crate::model::{ICDATASection, IComment, IText};
use crate::serializer::StandardSerializers;
use crate::util::{CharSequenceValue, Utf16String};
use crate::{IEngineConfiguration, TemplateMode};
use super::{AbstractStandardInliner, IInliner, StandardInlinerEscaping};
pub struct StandardJavaScriptInliner(AbstractStandardInliner);
impl StandardJavaScriptInliner {
pub fn new(
configuration: &dyn IEngineConfiguration,
) -> Result<Self, TemplateProcessingException> {
Ok(Self(AbstractStandardInliner::new(
configuration,
TemplateMode::JAVASCRIPT,
StandardInlinerEscaping::JavaScript(StandardSerializers::get_java_script_serializer(
configuration,
)?),
)))
}
}
impl IInliner for StandardJavaScriptInliner {
fn get_name(&self) -> &Utf16String {
static NAME: OnceLock<Utf16String> = OnceLock::new();
NAME.get_or_init(|| Utf16String::from_rust_str("StandardJavaScriptInliner"))
}
fn inline_text(
&self,
context: &dyn ITemplateContext,
text: &dyn IText,
) -> StandardExpressionResult<Option<Box<dyn CharSequenceValue>>> {
self.0.inline_text(context, text)
}
fn inline_cdata_section(
&self,
context: &dyn ITemplateContext,
value: &dyn ICDATASection,
) -> StandardExpressionResult<Option<Box<dyn CharSequenceValue>>> {
self.0.inline_cdata_section(context, value)
}
fn inline_comment(
&self,
context: &dyn ITemplateContext,
value: &dyn IComment,
) -> StandardExpressionResult<Option<Box<dyn CharSequenceValue>>> {
self.0.inline_comment(context, value)
}
}