google / google/zerocopy

Document that our traits opt-in to creating type instances

Open
#260 0 comments 0 reactions 0 assignees View on GitHub
compatibility-nonbreaking
Dominant language
Rust
Stars
2.6k
Forks
179
Avg merge
1d 19h
Merged PRs (30d)
29

Description

*See also: https://github.com/google/zerocopy/issues/1792#issuecomment-2389405203*

Some types satisfy the soundness requirements of our traits, but nonetheless have a safety invariant that means that it would be invalid for them to expose the ability to do things like construct arbitrary instances of their type. E.g.:

```rust
/// An unforgeable token that represents that an operation has been performed.
#[repr(transparent)]
pub struct CompletionToken(());
```

(Okay, this type probably wouldn't be `#[repr(transparent)]`, but you get the point.)

This has two implications:
- We can't write blanket impls for types based on their layout even if it would be sound. E.g., if we're able to encode ZST-ness in the type system, it would still be invalid to implement `FromBytes` for any ZST type despite it being technically sound.
- We should clarify in the trait documentation what the author is opting into by deriving or implementing these traits. For [`TryFromBytes`](https://github.com/google/zerocopy/issues/5), we should also call out the interaction with custom validation.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.