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.
So... I was not happy with #1090, it was a bit hacky and required the macro crate to depend on smithay just for module definitions.
So this is take two:
The proc macro allows us to delegate so-called bundles like so:
The macro is intentionaly built from valid rust syntax, and therefore this piece of code is fully rustfmt compatible.
Tho, one can opt out of rustfmt compatibility by dropping some optional pieces of syntax for example all of those are valid:
impl<T> State<T> {}
impl<T> State<T>
State
(only if your state is not generic)So, now that we have a nice bundle macro, Smithay can just wrap it like so:
And end user can use it more or less like the old macro:
Future
Derive macro could call those macros with proper generics automatically, it could look like this: