4个版本
| 0.1.2 | 2022年1月19日 | 
|---|---|
| 0.1.1 | 2022年1月19日 | 
| 0.1.0 | 2022年1月18日 | 
| 0.0.1 | 2022年1月18日 | 
#901 in 过程宏
34KB
892 行
注意! 此crate为实验性,处于开发中。它可能包含会以意外方式更改代码行为的错误。在使用之前,您应审查宏展开的代码,并将您发现的任何错误报告到https://github.com/frxstrem/cain/issues的bug跟踪器。
cain! 宏是一个将顺序Rust分支语句重写为嵌套分支的宏。
这可以在您想要具有不同类型但行为相似的分支时很有用,例如具有公共trait的具体类型,而无需使用运行时trait对象,例如 Box<dyn Trait>。
这种方法的缺点是,代码量与展开代码中的顺序分支数量呈指数级增长。
MSRV
cain所需的最小Rust版本是1.57.0(2021年12月)。
示例
代码
fn foo(): Result<i32, bool> { .. }
let a = cain! {
  let value = match foo() {
    Ok(n) => n,
    Err(b) => b,
  };
  value.to_string()
};
将被 cain! 宏展开成代码
fn foo(): Result<i32, bool> { .. }
let a = {
  match foo() {
    Ok(n) => {
      let value = n;
      n.to_string()
    },
    Err(b) => {
      let value = b;
      b.to_string()
    }
  }
};
依赖关系
~1.5MB
~36K SLoC