Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
These are not needed in the structs, but rather in the impl blocks.
The stemmed from when I was newer to Rust and didn't realise that
#[derive(Clone)]
was valid if some generics didn't implement Clone. I discovered this is likeimpl<C: Clone> Clone for Msg<C> { ... }
, so we get that check for free.When working with multi-test and more powerful use of generics and traits, these restrictions were quite troublesome. If you have a type that doesn't implement one and it is used somewhere that needs it, that will cause a compiler error. So no need to enforce that on the type.