1 个不稳定版本
0.1.0 | 2019年5月1日 |
---|
#6 in #强制类型转换
13KB
332 行
强制类型转换
原地类型转换。
lib.rs
:
相同大小和对齐的类型之间的原地转换。
示例
use coercion::{Coerce, As};
let u8_slice: Box<[u8]> = vec![1,0,1,0].into_boxed_slice();
// Safe because true as u8 == 1
let bool_slice: Box<[bool]> = unsafe { u8_slice.coerce() };
assert_eq!(&bool_slice[..], &[true, false, true, false]);
// Don't need unsafe, because any bool is a valid u8
let u8_slice: Box<[u8]> = bool_slice.as_();
assert_eq!(&u8_slice[..], &[1,0,1,0]);
为 Coerce
和 As
实现了对 str
的支持
use coercion::{Coerce, As};
let boxed_str = Box::<str>::from("Hello World!");
let boxed_bytes = boxed_str.as_();
assert_eq!(&boxed_bytes[..], b"Hello World!");
let boxed_str: Box<str> = unsafe { boxed_bytes.coerce() };
assert_eq!(&*boxed_str, "Hello World!");