#![crate_type = "cdylib"] use std::convert::From; // A Rust function that accepts a tuple fn flip_things_around_rust(tup: (u32, u32)) -> (u32, u32) { let (a, b) = tup; (b + 1, a - 1) } // A struct that can be passed between C and Rust #[repr(C)] pub struct Tuple { x: u32, y: u32, } // Conversion functions impl From<(u32, u32)> for Tuple { fn from(tup: (u32, u32)) -> Tuple { Tuple { x: tup.0, y: tup.1 } } } impl From for (u32, u32) { fn from(tup: Tuple) -> (u32, u32) { (tup.x, tup.y) } } // The exported C method #[no_mangle] pub extern "C" fn flip_things_around(tup: Tuple) -> Tuple { flip_things_around_rust(tup.into()).into() }