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.
Description of Changes
Fixes #2089.
Since C# doesn't have fixed-size arrays available to safe code, I decided it's simpler to accept a pointer to
Identity
itself. It's stored as little-endian anyway, so the only change that was necessary is to mark the struct as FFI-compatible. The actual FFI declaration foridentity
looks a bit different from others for .NET reasons - see comment on the declaration for more details, but the code itself is still pretty simply.Marking the struct as FFI-compatible also allowed to remove a bunch of helpers, casts and intermediate allocations, since we can now read/write
Identity
andAddress
directly instead of reaching into their internal representation.For testing, I moved the Rust-specific integration test from smoketests to our "standalone integration test" which runs for both Rust and C#, and implemented C# counterpart to it.
API and ABI breaking changes
If this is an API or ABI breaking change, please apply the
corresponding GitHub label.
Expected complexity level and risk
1
How complicated do you think these changes are? Grade on a scale from 1 to 5,
where 1 is a trivial change, and 5 is a deep-reaching and complex change.
This complexity rating applies not only to the complexity apparent in the diff,
but also to its interactions with existing and future code.
If you answered more than a 2, explain what is complex about the PR,
and what other components it interacts with in potentially concerning ways.
Testing
Describe any testing you've done, and any testing you'd like your reviewers to do,
so that you're confident that all the changes work as expected!