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.