9 个版本
0.2.3 | 2024 年 8 月 13 日 |
---|---|
0.2.2 | 2023 年 12 月 20 日 |
0.2.1 | 2023 年 9 月 3 日 |
0.2.0 | 2023 年 7 月 3 日 |
0.1.1 | 2021 年 1 月 5 日 |
#779 in Rust 模式
每月 460 次下载
用于 27 个 crate (21 直接)
12KB
191 行
安全测量
Rust 特质,用于定义类型之间的安全转换。
示例用法
use safecast::*;
struct Foo {
a: i32,
}
struct Bar {
b: u16,
}
enum Baz {
Foo(Foo),
Bar(Bar),
}
impl CastFrom<Bar> for Foo {
fn cast_from(bar: Bar) -> Self {
Foo { a: bar.b as i32 }
}
}
impl TryCastFrom<Foo> for Bar {
fn can_cast_from(foo: &Foo) -> bool {
foo.a >= 0 && foo.a <= u16::MAX
}
fn opt_cast_from(foo: Foo) -> Option<Self> {
if foo.a >= 0 && foo.a <= u16::MAX {
Some(Self { b: foo.a as u16 })
} else {
None
}
}
}
impl AsType<Foo> for Baz {
fn as_type(&self) -> Option<&Foo> {
match self {
Self::Foo(foo) => Some(foo),
_ => None,
}
}
fn as_type_mut(&mut self) -> Option<&mut Foo> {
match self {
Self::Foo(foo) => Some(foo),
_ => None,
}
}
fn into_type(self) -> Option<Foo> {
match self {
Self::Foo(foo) => Some(foo),
_ => None,
}
}
}