Skip to content

Emit lifetimes on extern type into Rust macro output #611

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Dec 29, 2020
Merged

Conversation

dtolnay
Copy link
Owner

@dtolnay dtolnay commented Dec 29, 2020

Part of #608.

An extern type type Example<'a, 'b>; turns into:

#[repr(C)]
pub struct Example<'a, 'b> {
    _private: ::cxx::private::Opaque,
    _lifetime_a: ::std::marker::PhantomData<&'a ()>,
    _lifetime_b: ::std::marker::PhantomData<&'b ()>,
}

unsafe impl<'a, 'b> ::cxx::ExternType for Asdf<'a, 'b> {
    type Id = ::cxx::type_id!("Example");
    type Kind = ::cxx::kind::Opaque;
}

Note that we assume covariant lifetimes. It's possible we'll also expose contravariant and invariant lifetimes something like the ghost crate (https://github.com/dtolnay/ghost#variance).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant