Investigating .NET bindings and bindings generator for C#

Motivation/Context:

  • As mentioned in #192 (closed), the technical steps for integrating the Matrix Rust SDK with the web client, iOS app and FIT-Connect SDKs needs to be clarified.
  • To this end, this spike aims to investigate whether the fact that the .NET bindings don't support external types is a blocker (see comment here).
  • Therefore, we need to investigate whether the unify bindings generator for C# can be used to create bindings usable by the FIT-Connect .NET SDK.
  • Moreover, Rust SDK in theory uses external types by definition of UniFFI, but it's unclear if that's true. We need to test it.

Scope:

  • This ticket will provide evidence for confirming the logical approach in #33

Time box:

Result/ACs:

  • Provide documentation explaining whether the lack of support for external types in .NET bindings is a blocker.
  • Provide documentation explaining whether the C# bindings generator works.
  • Document the results in this ticket.
  • Document decision-making process in this ticket.
  • Provide documentation what the next steps are and how to overcome the blocker, in case there is a blocker.

Notes/Hints/Ideas:

  • In order to improve the generation of the bindings, we need someone with C# knowledge (Milton is happy to try it, bur probably we'll need support here).
  • Swift / Kotlin bindings are generated from a single matrix-sdk-ffi crate which seems to define and export its own types, some based in existing Ruma and Rust SDK types.
  • UniFFI bindings: https://github.com/NordSecurity/uniffi-bindgen-cs/issues/40
  • Requirements uIDs: OZG_14; Zapuk_28

Who needs to be involved / informed:

  • reviewer:
  • involved: Milton, Marcel, Josephine, Marco
  • informed: Milton
Edited by Robert Gerbauld