freemarker 0.1.1

Apache FreeMarker 语义兼容的 Rust 模板引擎(freemarker-core 迁移)
Documentation
//! 类工具 —— 对应 Java `freemarker.template.utility.ClassUtil`
//! (JVM 反射工具:forName/短类名/类型描述等)
//! v1 差异:无类加载机制(安全决策)——`for_name` 报错;
//! 短类名用 std::any::type_name 近似(文档化)

use crate::error::{Result, TemplateError};

/// 类工具(对应 ClassUtil.java)
pub struct ClassUtil;

impl ClassUtil {
    /// 类加载(Java `forName`;v1 无类加载 → 明确报错,与 ?new 的
    /// ClassNotFoundException 语义一致)
    pub fn for_name(class_name: &str) -> Result<()> {
        Err(TemplateError::misc(format!(
            "No error description was specified for this error; low-level message: java.lang.ClassNotFoundException: {class_name}"
        )))
    }

    /// 类型名(Java `getShortClassName`;Rust 用 type_name 近似)
    pub fn get_short_class_name<T: ?Sized>() -> String {
        let full = std::any::type_name::<T>();
        full.rsplit("::").next().unwrap_or(full).to_string()
    }
}