Add RefEncode
, and make Encode
bounds required
#14
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.
Adds
RefEncode
which represents types whoose pointers has an encoding. This means you now only have to implementRefEncode
, and not both&Encode
and&mut Encode
(whom should always yield the same results anyway).This setup is much better for generic code like in
Message
, which now requires implementations to implementRefEncode
(which they should do anyhow).This fixes SSheldon/rust-objc#80 because you're now required to annotate types that can be sent in a message (and then you can avoid
Drop
types), which vastly cuts down on footguns with usingmsg_send
.Also fixes SSheldon/rust-objc#26 by using the
Encode
/RefEncode
split (instead of specialization).Note: This design has already been explored in SSheldon/rust-objc#13, but was removed, I think because it didn't seem that nice, but anyhow, that was in 2015. Going through the bounds in
objc_foundation
it quickly becomes really, really difficult to do withoutRefEncode
, becauseRefEncode
is kinda fundamental.Lastly, this fixes SSheldon/rust-objc-foundation#2 by going back to the original design from above.