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]实现
- [From]<std::io::Error> for Error
- [From]<std::num::ParseIntError> for Error
- [From]<std::num::ParseFloatError> for Error
现在你可以在这些类型中的任何一种上使用 ?
并返回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