cismute
Provides safe trivial transmutes in generic context, emulating specialization on stable Rust. These functions are designed for being optimized out by the compiler, so are probably zero-cost in most cases.
assert_eq!;
assert_eq!;
cismute::owned works only for 'static types. If your type is a reference, you should use cismute::reference or cismute::mutable.
assert_eq!;
assert_eq!;
There’s also a more generic function cismute::value which can do all three. Writing all type arguments can be cumbersome, so you can also pass the type pair as an argument via cismute::value_with:
use Pair;
assert_eq!;
assert_eq!;
There are also switch!() macro and switch() function to match one value with multiple types.
Comparison to other crates
-
refl and identity require providing a proof of type equality to transmute. This is impossible in some contexts (e.g. when implementing a generic method of a foreign trait) and makes zero-cost switching on multiple types really hard if not impossible, since you need to optionally provide proofs for different types.
-
safe-transmute provides various safe transmutations, but doesn’t provide transmutation to the same type.