macro_rules! builder_helper {
(@ { $self:ty, $($builder:ty),+ }) => { ... };
(Self, $($builder:ty),+ $(,)?) => { ... };
(&mut Self, $($builder:ty),+ $(,)?) => { ... };
}Expand description
为构建器模式提供辅助方法的宏。
此宏为指定的构建器类型添加一个 when_some 方法,允许条件性地设置可选值。
当 Option<T> 为 Some 时,会调用提供的函数来设置值;当为 None 时,直接返回构建器本身。
§用法
有两种调用方式:
- 为
Self类型实现:use rust_patterns_components::builder_helper; struct MyBuilder1; struct MyBuilder2; builder_helper!(Self, MyBuilder1, MyBuilder2); // 现在 MyBuilder1 和 MyBuilder2 都有 when_some 方法 - 为
&mut Self类型实现:use rust_patterns_components::builder_helper; struct MyBuilder1; struct MyBuilder2; builder_helper!(&mut Self, MyBuilder1, MyBuilder2); // 现在 MyBuilder1 和 MyBuilder2 都有 when_some 方法
§生成的方法
宏会为每个指定的构建器类型生成一个 when_some 方法:
fn when_some<T>(self, value: Option<T>, func: impl FnOnce(Self, T) -> Self) -> Self
where
Self: Sized,
{
match value {
Some(v) => func(self, v),
None => self,
}
}或者对于 &mut Self 版本:
fn when_some<T>(&mut self, value: Option<T>, func: impl FnOnce(&mut Self, T) -> &mut Self) -> &mut Self
where
Self: Sized,
{
match value {
Some(v) => func(self, v),
None => self,
}
}