1 个不稳定版本
0.1.0 | 2024年1月17日 |
---|
#69 in #try
102 每月下载量
在 3 个crate中使用了(通过 odra-macros)
16KB
230 代码行
描述
此crate提供了一个过程宏,用于为目标结构体实现 TryFrom<&Struct>
。它有助于将较大的结构体转换为几个较小的、更专业的结构体。宏展开为一个 TryFrom
实现尝试将目标结构体的每个字段从整个源结构体转换。如果转换失败,宏返回一个错误。
用法
use try_from_ref::TryFromRef;
struct Source {
x: u32,
y: u32,
name: String,
description: String,
}
#[derive(derive_try_from::TryFromRef)]
#[source(Source)]
#[err(&'static str)]
struct Target {
sum: Sum,
meta: Metadata,
#[default]
is_dirty: bool,
}
展开为
#[automatically_derived]
impl ::core::convert::TryFrom<&'_ Source> for Target {
type Error = &'static str;
fn try_from(input: &'_ Source) -> ::core::result::Result<Self, Self::Error> {
Ok(Self {
sum: input.try_into()?,
meta: input.try_into()?,
is_dirty: Default::default(),
})
}
}
在结构体级别,需要两个属性
#[source(SourceType)]
- 源结构体的名称#[err(ErrorType)]
- 转换失败时返回的错误类型
在字段级别,还支持另外两个属性
#[default]
- 跳过转换,设置类型的默认值#[expr(expression)]
- 用于获取字段值的表达式
MSRV(最低支持的Rust版本)
最低支持的Rust版本是1.60.0。
依赖项
~310–770KB
~18K SLoC