1 个不稳定版本

0.0.3 2023年9月24日
0.0.2 2023年9月23日
0.0.1 2023年9月23日
0.0.0 2023年9月23日

#2182Rust 模式

Download history 1028/week @ 2024-03-13 231/week @ 2024-03-20 43/week @ 2024-03-27 39/week @ 2024-04-03 75/week @ 2024-04-10 255/week @ 2024-04-17 44/week @ 2024-04-24 651/week @ 2024-05-01 20/week @ 2024-05-08 28/week @ 2024-05-15 599/week @ 2024-05-22 139/week @ 2024-05-29 104/week @ 2024-06-05 99/week @ 2024-06-12 33/week @ 2024-06-19 22/week @ 2024-06-26

274 次每月下载

MIT/Apache

6KB

一个允许你将一个类型安全地转换成另一个类型的 crate。

这对于泛型函数非常有用,例如。

pub fn foo<S>(s: S) {
    if let Ok(a) = unsafe { unty::<S, u8>(s) } {
        println!("It is an u8 with value {a}");
    } else {
        println!("it is not an u8");
    }
}
foo(10u8); // will print "it is an u8"
foo("test"); // will print "it is not an u8"

此操作仍然是不安全的,因为它允许你扩展生命周期。目前还没有办法防止这一点。

if let Ok(str) = unsafe { unty::<&'a str, &'static str>(input) } {
    // the compiler may now light your PC on fire
}

许可证

此 crate 双重许可 MIT 和 Apache-2.0,由你自己决定。


lib.rs:

一个允许你取消类型指定的 crate。

这提供了 2 个函数

type_equal 允许你检查两个类型是否相同。

unty 允许你将泛型类型向下转换成具体类型。

这对于泛型函数非常有用,例如。

pub fn foo<S>(s: S) {
    if let Ok(a) = unsafe { unty::<S, u8>(s) } {
        println!("It is an u8 with value {a}");
    } else {
        println!("it is not an u8");
    }
}
foo(10u8); // will print "it is an u8"
foo("test"); // will print "it is not an u8"

请注意,如果两个类型都具有生命周期,这两个函数都可能会给出错误的结果。目前还没有办法防止这一点。有关更多信息,请参阅 type_equal

assert!(type_equal::<&'a str, &'static str>()); // these are not actually the same
if let Ok(str) = unsafe { unty::<&'a str, &'static str>(input) } {
    // this will extend the &'a str lifetime to be &'static, which is not allowed.
    // the compiler may now light your PC on fire.
}

无运行时依赖