]> git.bitcoin.ninja Git - rust-lightning/commit
[bindings] Un-special-case returning an associated type
authorMatt Corallo <git@bluematt.me>
Wed, 25 Nov 2020 19:46:21 +0000 (14:46 -0500)
committerMatt Corallo <git@bluematt.me>
Mon, 4 Jan 2021 17:40:40 +0000 (12:40 -0500)
commit9029a77de0fcfe813bb5d5075337d57a56597d6a
tree89293bd516aeccefd99be05d97e3da5a64bcdcca
parentf2d042290822344064a964b8ddce77525fd4d1b4
[bindings] Un-special-case returning an associated type

In the case that we return an associated type to C (ie when
implementing a trait which returns an associated type, we had to
convert the Rust-returned concrete Rust type to the C trait struct),
we had code to manually create the neccessary trait struct at the
return site.

This was special-cased in the method-body-writing function instead
of letting the type conversion logic handle it. As a result, we are
unable to do the same conversion when it appears in a different
context, for example inside of a generic like
`Result<Self::AssocType, ErrorType>`.

To solve this, we do the actual work in a
`impl From<nativeType> for CTraitStruct` implementation and then
call `into()` from within the type conversion logic.
c-bindings-gen/src/blocks.rs
c-bindings-gen/src/main.rs
c-bindings-gen/src/types.rs