Avoid emitting a #[schemars(with = "...")]
annotation when one already exists
#682
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.
The
#[schemars]
annotation emitted by#[serde_as]
will cause errors if the user has already added an existing#[schemars(with = ...)]
annotation. This ends up being rather annoying since there's no way to work around the error other than to manually expand what#[serde_as]
does.I ended up running into this when I was trying to convert some of my existing code to use the new integration instead of manually sticking
#[schemars(with = "blah")]
everywhere.This PR fixes the issue by making
#[serde_as]
avoid emitting the schemars attribute if there is an existing one of the field that specifies any one of#[schemars(with = "...")]
#[schemars(serialize_with = "...")]
#[schemars(deserialize_with = "...")]
The actual code is a bit more involved (e.g.
serialize_as
doesn't conflict with#[schemars(deserialize_with = "...")]
) but that's the gist of it.I have also included a test case to validate that this works as expected.