freemarker 0.1.1

Apache FreeMarker 语义兼容的 Rust 模板引擎(freemarker-core 迁移)
Documentation
//! 默认迭代器适配器 —— 对应 Java `freemarker.template.DefaultIteratorAdapter`
//! (Java :128 行:Iterator → 一次性 collection 适配;v1 包装 Vec 快照)

use crate::error::Result;
use crate::template::{TModel, TemplateCollectionModel};

/// 默认迭代器适配器(对应 DefaultIteratorAdapter.java;一次性消费语义)
pub struct DefaultIteratorAdapter {
    items: Vec<TModel>,
}

impl DefaultIteratorAdapter {
    pub fn adapt(items: Vec<TModel>) -> Self {
        DefaultIteratorAdapter { items }
    }
}

impl TemplateCollectionModel for DefaultIteratorAdapter {
    fn iterator(&self) -> Result<Box<dyn Iterator<Item = Result<TModel>>>> {
        Ok(Box::new(
            self.items
                .iter()
                .cloned()
                .map(Ok)
                .collect::<Vec<_>>()
                .into_iter(),
        ))
    }
}