Crate safe_transmute [−] [src]
This crate contains checked implementations of transmute()
.
The base functions in this crate are not inherently safe, but just guarded against common simple mistakes (like trying to create an 8-byte type from 7 bytes). These functions are exactly as safe as the data passed to them - creating a null pointer, for example, is not unsafe in and of itself, but dereferencing it certainly is, but they don't do that (see here for extended discussion).
Other functions in this crate, on the other hand, provide enough safety measures to ensure safety in
all circumstances. This is the case for those found in the pod
and bool
modules.
Examples
View bytes as a series of u16
s:
assert_eq!(guarded_transmute_many::<u16>(&[0x00, 0x01, 0x12, 0x34, // Spare byte, unused 0x00])?, &[0x0100, 0x3412]);
View all bytes as a series of u16
s:
assert_eq!(guarded_transmute_many_pedantic::<u16>(&[0x00, 0x01, 0x12, 0x34])?, &[0x0100, 0x3412]);
View bytes as an f64
:
assert_eq!(guarded_transmute::<f64>(&[0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40])?, 2.0);
View a series of u16
s as bytes:
assert_eq!(guarded_transmute_to_bytes_pod_many(&[0x0001u16, 0x1234u16]), &[0x01, 0x00, 0x34, 0x12].le_to_native::<u16>());
Modules
guard |
The |
util |
Module containing various utility functions. |
Structs
GuardError |
A transmutation error. |
Enums
ErrorReason |
How the type's size compares to the received byte count and the transmutation function's characteristic. |
Traits
PodTransmutable |
Type that can be non- |
Functions
guarded_transmute⚠ |
Transmute a byte slice into a single instance of a |
guarded_transmute_bool_pedantic |
View a byte slice as a slice of boolean values. |
guarded_transmute_bool_permissive |
View a byte slice as a slice of boolean values. |
guarded_transmute_bool_vec_pedantic |
Trasform a byte vector into a vector of bool. |
guarded_transmute_bool_vec_permissive |
Trasform a byte vector into a vector of bool. |
guarded_transmute_many⚠ |
View a byte slice as a slice of an arbitrary type. |
guarded_transmute_many_pedantic⚠ |
View a byte slice as a slice of an arbitrary type. |
guarded_transmute_many_permissive⚠ |
View a byte slice as a slice of an arbitrary type. |
guarded_transmute_pedantic⚠ |
Transmute a byte slice into a single instance of a |
guarded_transmute_pod |
Transmute a byte slice into a single instance of a POD. |
guarded_transmute_pod_many |
Transmute a byte slice into a single instance of a POD. |
guarded_transmute_pod_many_pedantic |
View a byte slice as a slice of POD. |
guarded_transmute_pod_many_permissive |
View a byte slice as a slice of a POD type. |
guarded_transmute_pod_pedantic |
Transmute a byte slice into a single instance of a POD. |
guarded_transmute_pod_vec |
Trasform a byte vector into a vector of POD. |
guarded_transmute_pod_vec_pedantic |
Trasform a byte vector into a vector of POD. |
guarded_transmute_pod_vec_permissive |
Trasform a byte vector into a vector of POD. |
guarded_transmute_to_bytes⚠ |
Transmute a single instance of an arbitrary type into a slice of its bytes. |
guarded_transmute_to_bytes_many⚠ |
Transmute a slice of arbitrary types into a slice of their bytes. |
guarded_transmute_to_bytes_pod |
Transmute a single instance of a POD type into a slice of its bytes. |
guarded_transmute_to_bytes_pod_many |
Transmute a slice of arbitrary types into a slice of their bytes. |
guarded_transmute_vec⚠ |
Trasform a byte vector into a vector of an arbitrary type. |
guarded_transmute_vec_pedantic⚠ |
Trasform a byte vector into a vector of an arbitrary type. |
guarded_transmute_vec_permissive⚠ |
Trasform a byte vector into a vector of an arbitrary type. |
Type Definitions
Error |
Describes possible errors originating from operations in this crate. |