thymeleaf 0.1.0-beta.0

A framework-neutral Thymeleaf-compatible dynamic template engine for Rust
Documentation
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};

/// JAVASCRIPT 模式 Standard 内联器。
///
/// 对应 Java: `org.thymeleaf.standard.inline.StandardJavaScriptInliner`。
pub struct StandardJavaScriptInliner(AbstractStandardInliner);

impl StandardJavaScriptInliner {
    /// 创建并绑定配置中 JavaScript Serializer 的内联器。
    /// 对应 Java 语义:`StandardJavaScriptInliner` 的 `new` 行为(Rust 侧辅助/私有路径)。
    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)
    }
}