Namespacing
(Supported by cpp, queried with supports = namespacing)
This attribute can be applied on types and on bridge modules (applying to all types in the module). It allows code to be organized under one or more namespaces.
#![allow(unused)]
fn main() {
#[diplomat::bridge]
#[diplomat::attr(auto, namespace = "mylib")]
mod ffi {
#[diplomat::opaque]
struct Foo;
#[diplomat::opaque]
struct Bar;
}
}
Here, in C++ Foo and Bar will both be available as mylib::Foo and mylib::Bar.
Nested namespaces are technically supported using things like mylib::mymodule, however they’re not tested and support is brittle, so use at your own risk (#591).
There is some discussion over separating the concept of a namespace and a library in #589.