#safe #cast #type #foo-bar #as

安全测量

定义类型之间安全转换的特质

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 模式

Download history 44/week @ 2024-05-02 45/week @ 2024-05-09 58/week @ 2024-05-16 69/week @ 2024-05-23 103/week @ 2024-05-30 53/week @ 2024-06-06 58/week @ 2024-06-13 72/week @ 2024-06-20 31/week @ 2024-06-27 38/week @ 2024-07-04 56/week @ 2024-07-11 71/week @ 2024-07-18 87/week @ 2024-07-25 66/week @ 2024-08-01 227/week @ 2024-08-08 79/week @ 2024-08-15

每月 460 次下载
用于 27 个 crate (21 直接)

Apache-2.0

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,
        }
    }
}

无运行时依赖