Rust Bridge Declarations

#[cxx::bridge]
mod ffi {
    extern "Rust" {
        type MyType; // ๋ถˆํˆฌ๋ช… ํƒ€์ž…์ž…๋‹ˆ๋‹ค.
        fn foo(&self); // `MyType`์˜ ๋ฉ”์„œ๋“œ์ž…๋‹ˆ๋‹ค.
        fn bar() -> Box<MyType>; // Free function
    }
}

struct MyType(i32);

impl MyType {
    fn foo(&self) {
        println!("{}", self.0);
    }
}

fn bar() -> Box<MyType> {
    Box::new(MyType(123))
}
  • extern "Rust"์— ์„ ์–ธ๋œ ํ•ญ๋ชฉ์€ ์ƒ์œ„ ๋ชจ๋“ˆ์˜ ๋ฒ”์œ„ ๋‚ด์— ์žˆ๋Š” ํ•ญ๋ชฉ์„ ์ฐธ์กฐํ•ฉ๋‹ˆ๋‹ค.
  • CXX ์ฝ”๋“œ ์ƒ์„ฑ๊ธฐ๋Š” extern "Rust" ์„น์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ์‘ํ•˜๋Š” C++ ์„ ์–ธ์ด ํฌํ•จ๋œ C++ ํ—ค๋” ํŒŒ์ผ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ƒ์„ฑ๋œ ํ—ค๋”๋Š” ํŒŒ์ผ ํ™•์žฅ์ž๊ฐ€ .rs.h์ธ ๊ฒฝ์šฐ๋ฅผ ์ œ์™ธํ•˜๊ณ  ๋ธŒ๋ฆฌ์ง€๊ฐ€ ํฌํ•จ๋œ Rust ์†Œ์Šค ํŒŒ์ผ๊ณผ ๋™์ผํ•œ ๊ฒฝ๋กœ๋ฅผ ๊ฐ–์Šต๋‹ˆ๋‹ค.