Skip to main content

builder_helper

Macro builder_helper 

Source
macro_rules! builder_helper {
    (@ { $self:ty, $($builder:ty),+ }) => { ... };
    (Self, $($builder:ty),+ $(,)?) => { ... };
    (&mut Self, $($builder:ty),+ $(,)?) => { ... };
}
Expand description

为构建器模式提供辅助方法的宏。

此宏为指定的构建器类型添加一个 when_some 方法,允许条件性地设置可选值。 当 Option<T>Some 时,会调用提供的函数来设置值;当为 None 时,直接返回构建器本身。

§用法

有两种调用方式:

  1. Self 类型实现:
    use rust_patterns_components::builder_helper;
    
    struct MyBuilder1;
    struct MyBuilder2;
    
    builder_helper!(Self, MyBuilder1, MyBuilder2);
    
    // 现在 MyBuilder1 和 MyBuilder2 都有 when_some 方法
  2. &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,
    }
}