1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
use std::sync::Arc;
use crate::util::Utf16String;
use super::{ExpressionObjectNames, StandardExpressionResult, TemplateValue};
/// 一次模板执行期间全部表达式工具对象的容器合同。
///
/// 容器让大多数工具对象在整次模板执行中保持同一实例,同时保留创建它们所使用的
/// [`crate::context::IExpressionContext`],使上下文相关对象随时读取当前状态。
///
/// 对应 Java: `org.thymeleaf.expression.IExpressionObjects`。
pub trait IExpressionObjects {
/// 返回工厂声明的表达式对象名称数量。
///
/// # 返回值
///
/// 返回名称集合的 Java `int` 大小。
fn size(&self) -> i32;
/// 判断指定名称是否由容器声明。
///
/// # 参数
///
/// - `name`:待查找的可空对象名称。
///
/// # 返回值
///
/// 名称存在于工厂完整名称集合时返回 `true`。
fn contains_object(&self, name: Option<&Utf16String>) -> bool;
/// 返回对象名称集合。
///
/// # 返回值
///
/// 返回构造容器时从工厂取得的同一共享只读集合。
fn get_object_names(&self) -> ExpressionObjectNames;
/// 按名称取得并在策略允许时缓存表达式对象。
///
/// # 参数
///
/// - `name`:待取得对象的可空名称。
///
/// # 返回值
///
/// 未声明名称或工厂构建 Java `null` 时返回 `None`;可缓存的 `None` 也会被记录,
/// 后续读取不会再次调用工厂。
///
/// # 错误
///
/// 原样返回表达式对象工厂的构建错误。
fn get_object(
&self,
name: Option<&Utf16String>,
) -> StandardExpressionResult<Option<Arc<TemplateValue>>>;
}