co3 0.4.0

Build C API from Rust
Documentation
use co3::{Tag, ReprC, ffi, rust_spec::RustSpec};

#[derive(RustSpec, Tag, ReprC)]
#[tag(u8, unsafe(1))]
#[repr(transparent)]
struct First(u8);

#[derive(RustSpec, Tag, ReprC)]
#[tag(u8, unsafe(3))]
#[repr(transparent)]
struct Second(u8);

ffi! {
    #![unsafe(extern("C"))]

    impl First {
        fn sealed1<T>(move value: T)
        where
            use<T> @ <Self>;

        fn sealed2<T>(move value: T)
        where
            use<T> @ <Self>;
    }

    pub fn sealed1<T>(move value: T)
    where
        use<T> @ <First>;

    pub fn sealed2<T>(move value: T)
    where
        use<T> @ <First>;
}

impl first_sealed1::sealed::Sealed<Second> for () {}
impl first_sealed2::DispatchSet<Second> for () {
    fn sealed2(_: Second) {}
}

impl sealed1::sealed::Sealed<Second> for () {}
impl sealed2::DispatchSet<Second> for () {
    fn sealed2(_: Second) {}
}

fn main() {
    First::sealed1(Second(0));
    sealed1(Second(0));
}