#数据转换 #转换 #clucompany #无标准库 #不安全转换

无标准库 cluFullTransmute

具有和没有约束检查的数据转换的更完整和扩展版本

8 个稳定版本

1.3.0 2024 年 5 月 12 日
1.2.0 2022 年 8 月 15 日
1.1.0 2022 年 6 月 2 日
1.0.6 2022 年 4 月 7 日
1.0.1 2019 年 8 月 30 日

#2 in #clucompany

Download history 136/week @ 2024-05-10 16/week @ 2024-05-17 2/week @ 2024-05-24 3/week @ 2024-05-31 2/week @ 2024-06-07 1/week @ 2024-06-28 28/week @ 2024-07-05 44/week @ 2024-07-26 5/week @ 2024-08-02

546 每月下载量
用于 cluconstdata

Apache-2.0

30KB
492

[clufulltransmute]

( 无约束检查的数据类型转换的更完整和扩展版本。 )

!!! 注意 !!!

  1. 在不检查数据大小的情况下进行类型转换时,您真的需要了解您正在做什么。
  2. 您必须了解您使用的平台的具体情况。

库功能

  1. 无数据和数据维度检查地将任何类型 A 转换为任何类型 B 的泛型数据。
  2. 能够在非常旧的 Rust 版本中的常量函数中使用转换。
  3. 通过合约实现延迟转换的可能性。
  4. 能够在没有标准库的情况下工作。

用法

将此添加到您的 Cargo.toml

[dependencies]
cluFullTransmute = "1.3.0"

并将此添加到您的源代码中

use cluFullTransmute::mem::transmute;

示例

use cluFullTransmute::transmute_or_panic;
use core::fmt::Display;

/*
	For example, let's write some code with a Drop trait that panics when dropped and
	holds some data. We then transmute this data to another similar struct and check
	that we have effectively overridden the Drop trait and have a different struct
	with some data.

	We can also remove the Drop trait altogether or do any number of other things.
*/

/// Struct to panic when dropped
#[derive(Debug)]
#[repr(transparent)]
struct PanicWhenDrop<T>(T);

impl<T> Drop for PanicWhenDrop<T> {
	fn drop(&mut self) {
		panic!("panic, discovered `drop(PanicWhenDrop);`");
	}
}

/// Struct to print value when dropped
#[derive(Debug)]
#[repr(transparent)]
struct PrintlnWhenDrop<T: Display>(T)
where
	T: Display;

impl<T> Drop for PrintlnWhenDrop<T>
where
	T: Display,
{
	fn drop(&mut self) {
		println!("println: {}", self.0);
	}
}

fn main() {
	let a: PanicWhenDrop<u16> = PanicWhenDrop(1024);
	println!("in a: {:?}", a);

	let b: PrintlnWhenDrop<u16> = unsafe { transmute_or_panic(a as PanicWhenDrop<u16>) };
	println!("out b: {:?}", b);

	drop(b); // <--- drop, PrintlnWhenDrop!
}
查看所有

许可证

此项目有一个单独的许可证 (LICENSE-APACHE-2.0)。

uproject  版权 (c) 2019-2024 #UlinProject

 (Denis Kotlyarov).


Apache 许可证

apache2  根据 Apache 许可证版本 2.0 许可。



无运行时依赖

特性