Split ToVariant and FromVariant traits #187
Merged
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.
Cherry-picked this off #181 because I think it would still be useful out of that PR's context, and can be reviewed individually, for use cases like #185 (comment), where you only really need a one-way conversion.
Related sections from the original PR comment:
Explanation
This allows types to be separately
ToVariant
andFromVariant
.ToVariant
no longer requireSized
. Bounds on export function arguments, return values, and property getter / setters are relaxed to require only one of these traits. As such, it's now possible to:FromVariant
as an argument. e.g. a custom "options" struct that reads from aDictionary
.ToVariant
as a return value. e.g.Instance<T>
.ToVariant
types into trait objects and send them through Rust channels:Box<dyn ToVariant + Send + 'static>
.All types that previously implement
ToVariant
are now alsoFromVariant
.Drawbacks
ToVariant
implementations on custom types are void, although a fix is very easy.ToVariant
as a bound and callfrom_variant
need to do useFromVariant
(orToVariant + FromVariant
) instead.