#枚举 #过程宏 #I/O错误 #变体 #实现 #数字 #生成

ace_it

自动化将类型包装到枚举中的宏

2个版本

0.1.1 2023年1月25日
0.1.0 2023年1月24日

#1864 in 过程宏

自定义许可协议

8KB
108

ace_it

自动转换枚举

描述

一个简单的proc_macro,用于为枚举的每个未命名变体自动生成From trait实现

用法

Cargo.toml

[dependencies]
ace_it = "0.1"

示例

#[macro_use]
extern crate ace_it;

#[derive(Debug)]
#[ace_it]
enum Error {
  Io(std::io::Error),
  ParseInt(std::num::ParseIntError),
  ParseFloat(std::num::ParseFloatError),
}

use std::io::Read;

fn read_int<R: Read>(reader: &mut R) -> Result<i32, Error> {
    let mut buf = String::new();
    reader.read_to_string(&mut buf)?;
    Ok(buf.parse()?)
}

未来特性

  • 忽略变体的属性

lib.rs:

自动转换枚举

此crate提供的过程宏为具有类型的未命名枚举字段生成[From]实现。

是否厌倦了编写相同的From实现来启用在某些[Result]类型上使用 ??这个crate就是为你准备的!

这对于用作将多个错误收集到一个大枚举中的包装器的枚举很有用。

示例

#[macro_use] extern crate ace_it;

#[derive(Debug)]
#[ace_it]
enum Error {
  Io(std::io::Error),
  ParseInt(std::num::ParseIntError),
  ParseFloat(std::num::ParseFloatError),
}

之后,Error有三个[From]实现

现在你可以在这些类型中的任何一种上使用 ? 并返回Error。


use std::io::Read;

fn read_int<R: Read>(reader: &mut R) -> Result<i32, Error> {
    let mut buf = String::new();
    reader.read_to_string(&mut buf)?;
    Ok(buf.parse()?)
}

依赖项

~1.5MB
~36K SLoC