Make enums rust enums not strings #1867
Open
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.
Possible fix to #340
This converts botocore shapes that are an enum into a rust enum.
Each enum has an
UknownVariant
variant that is used if the string that it is deserialised from is not a known variant.This means that it can implment both From and Into and always round trip back to the same string.
This means that unsupported future varaints can be sent via a simple
"FOO".into()
and matched withThis require carefull attention as it would be a massive API change.
Edit 2021-02-25:
There are some ugly side effects of this. I had to add a default implementation to the enums so that input structs can derive default, I went with
UknownVariant("")
as that is what the original code would have done but I don't like it.I also had to add a bunch of conversion impls for the enums which adds to the generated code size:
Display
Into<Sting>
,From<String>
Into<&str>
,From<&str>
for a borrowed enumToParam
Serialize
andDeserialize
if needed/configured