pub trait Mutator: Accessor {
// Required method
fn mutator_for(
&mut self,
field: &str,
value: &Value,
merged_data: &HashMap<String, Value>,
) -> Option<MutatorResult>;
// Provided methods
fn set_attr(
&mut self,
name: &str,
value: Value,
data: Option<&HashMap<String, Value>>,
) { ... }
fn set_attrs(&mut self, data: &HashMap<String, Value>) { ... }
}Expand description
修改器 trait — 对齐 PHP setAttr / setXxxAttr
§PHP 对齐
| PHP 方法 | Rust 等价 | 说明 |
|---|---|---|
setAttr($name, $value, $data) | Self::set_attr() | 入口方法 |
setXxxAttr($value, $data) | Self::mutator_for() | 业务模型按字段派发 |
setAttrs($data) | Self::set_attrs() | 批量赋值 |
§修改器第二参数 merged_data
PHP setXxxAttr($value, $data) 中 $data = array_merge($this->data, $data),
即「当前模型数据 + 外部批量数据」的合并。Rust 中 Self::mutator_for()
第三参数 merged_data 保留此语义。
§优先级
- 方法修改器
mutator_for→ 若返回Some则使用其结果 - 无修改器 → 原样写入
data_map
$type 类型转换 / 关联属性 / __toString 由各功能模块分别实现,当前阶段仅支持方法修改器。
Required Methods§
Sourcefn mutator_for(
&mut self,
field: &str,
value: &Value,
merged_data: &HashMap<String, Value>,
) -> Option<MutatorResult>
fn mutator_for( &mut self, field: &str, value: &Value, merged_data: &HashMap<String, Value>, ) -> Option<MutatorResult>
Provided Methods§
Sourcefn set_attr(
&mut self,
name: &str,
value: Value,
data: Option<&HashMap<String, Value>>,
)
fn set_attr( &mut self, name: &str, value: Value, data: Option<&HashMap<String, Value>>, )
入口方法 — 对应 PHP setAttr($name, $value, $data)
执行流程(对齐 Attribute.php 第 367-395 行):
- 字段名归一化
- 构造
merged_data(data_map+ 外部data) - 派发到
mutator_for - 处理
Skip/Value/None三种结果 - 失效同名字段访问器缓存(对应 PHP
unset($this->get[$name]))
Dyn Compatibility§
This trait is dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".