]> 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>
Tue, 2 Feb 2021 22:04:31 +0000 (17:04 -0500)
commit3f5a287ca858528e5c557cea82822420fa65a384
treeeed50e32f893ae9d8597d8273475e582853526f3
parent086434f0c5a2447534cbacb0c88fab40ebdab859
[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