#instance #option-t #zip #macro #zipping #arguments #usize

zips

用于连接超过2个实例的Option的宏

3个版本

0.1.2 2024年7月19日
0.1.1 2024年7月18日
0.1.0 2024年7月18日

#302 in 过程宏

Download history 234/week @ 2024-07-13 83/week @ 2024-07-20 11/week @ 2024-07-27

每月252次下载

MIT 许可证

6KB
68

zips

因为我讨厌不能用Option::zip来处理超过2个参数...

安装

$> cargo add zips

使用方法

use zips::{zip, zip_result};

fn main() -> () {
  let i: Option<i32> = Some(0);
  let j: Option<usize> = Some(1usize);
  let k: Option<usize> = None;
 
  //  zipped_some: Option<(i32, usize)>
  let zipped_some = zip!(i, j);
  assert_eq!(zipped_some, Some((0, 1usize)));
 
  //  zipped_none: Option<(i32, usize, usize)>
  let zipped_none = zip!(i, j, j);
  assert_eq!(zipped_none, None);


  let m: Result<i32, String> = Ok(1);
  let n: Result<usize, String> = Ok(0usize);
  let o: Result<usize, String> = Err("I'm an error!");
 
  //  zipped_ok: Option<(i32, usize)>
  let zipped_ok = zip_result!(m, n);
  assert_eq!(zipped_some, Some((1, 0usize)));
 
  //  zipped_err: Option<(i32, usize, usize)>
  let zipped_err = zip_result!(m, n, o);
  assert_eq!(zipped_err, None);
}

依赖项

~240–680KB
~16K SLoC