Skip to content

Commit

Permalink
Update unsafe trait example to zerocopy version 0.8 (google#2434)
Browse files Browse the repository at this point in the history
Zerocopy crate version 0.8 introduced changes to its API, which caused
the example code to break.
google/zerocopy#1680
> AsBytes ->
[IntoBytes](https://docs.rs/zerocopy/0.8.*/zerocopy/trait.IntoBytes.html)

---------

Co-authored-by: Martin Geisler <[email protected]>
  • Loading branch information
semihbkgr and mgeisler authored Nov 4, 2024
1 parent b6b4381 commit b4f07ba
Showing 1 changed file with 7 additions and 12 deletions.
19 changes: 7 additions & 12 deletions src/unsafe-rust/unsafe-traits.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,36 +8,31 @@ Like with functions, you can mark a trait as `unsafe` if the implementation must
guarantee particular conditions to avoid undefined behaviour.

For example, the `zerocopy` crate has an unsafe trait that looks
[something like this](https://docs.rs/zerocopy/latest/zerocopy/trait.AsBytes.html):
[something like this](https://docs.rs/zerocopy/latest/zerocopy/trait.IntoBytes.html):

```rust,editable
use std::mem::size_of_val;
use std::slice;
use std::{mem, slice};
/// ...
/// # Safety
/// The type must have a defined representation and no padding.
pub unsafe trait AsBytes {
pub unsafe trait IntoBytes {
fn as_bytes(&self) -> &[u8] {
unsafe {
slice::from_raw_parts(
self as *const Self as *const u8,
size_of_val(self),
)
}
let len = mem::size_of_val(self);
unsafe { slice::from_raw_parts((&raw const self).cast::<u8>(), len) }
}
}
// SAFETY: `u32` has a defined representation and no padding.
unsafe impl AsBytes for u32 {}
unsafe impl IntoBytes for u32 {}
```

<details>

There should be a `# Safety` section on the Rustdoc for the trait explaining the
requirements for the trait to be safely implemented.

The actual safety section for `AsBytes` is rather longer and more complicated.
The actual safety section for `IntoBytes` is rather longer and more complicated.

The built-in `Send` and `Sync` traits are unsafe.

Expand Down

0 comments on commit b4f07ba

Please sign in to comment.