Constructors
(Supported by dart, queried with supports = constructors. Intended to be supported in kotlin, js, and cpp)
Methods that return Self can be marked as a constructor:
#![allow(unused)]
fn main() {
#[diplomat::bridge]
mod ffi {
#[diplomat::opaque]
struct Foo;
impl Foo {
#[diplomat::attr(auto, constructor)]
pub fn create() -> Box<Self> {
Box::new(Foo)
}
}
}
}
and then instead of there being a regular Foo::create() method, Foo will now have a direct constructor Foo().
Constructors can additionally be given names using #[diplomat::attr(auto, named_constructor = "make")], for languages that support named constructors (supports = named_constructors).
Not all languages support fallible constructors, this can be queried with supports = fallible_constructors.