1 个不稳定版本
0.0.3 | 2023年9月24日 |
---|---|
0.0.2 |
|
0.0.1 |
|
0.0.0 |
|
#2182 在 Rust 模式
274 次每月下载
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.
}