prefer static_map! over explicit unsafe in serde deserialisation #17
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.
Instead of going over all the entries and checking if they are initialised and then going over them
again and unwrapping unsafely, we can just go over it once and report the error on first failure. The semantics should be exactly the same but we no
longer have an explicit
unsafe
in here: it'smoved behind the
static_map!
macro instead which can be considered more battle-hardened.If we're accepting unsafe then it might make more
sense to do something like
[MaybeUninit<T>; L::LENGTH]
though something like theBuilder
is needed to make this ergonomic. Either way, I think the version in this commit at least hides themagic.
PS: I checked if we can just replace
.unwrap_unchecked()
with.unwrap()
but itseems that rustc is not able to notice that it
will never fail so it generates panic code anyway.