Document that our traits opt-in to creating type instances
- 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
Assessment
This issue has not been assessed yet.