That's a gross misunderstanding of `unsafe`'s place in Rust, and also of the use cases for `union` vs `enum`.
What's the Rust translation of this example?: https://ziglang.org/documentation/master/#Tagged-union
enum MyEnum { Ok(u8), NotOk }
fn main() {
let value = MyEnum::Ok(42);
assert!(matches!(value, MyEnum::Ok(_)));
match value {
MyEnum::Ok(x) => assert_eq!(x, 42),
MyEnum::NotOk => unreachable!(),
}
}
No unsafe to be found. The feature is there, it just has a different keyword than you might be used to -- the same way Haskell and Java both have something called "class" that mean different things.Rust unions are plain old unions that are mainly used for C interop. This is why using them requires unsafe code.