Functions
All top-level functions get exposed through the UDL's namespace
block.
For example, if the crate's lib.rs
file contains:
fn hello_world() -> String {
"Hello World!".to_owned()
}
The UDL file will look like:
namespace Example {
string hello_world();
}
Optional arguments & default values
Function arguments can be marked optional
with a default value specified.
In the UDL file:
namespace Example {
string hello_name(optional string name = "world");
}
The Rust code will take a required argument:
fn hello_name(name: String) -> String {
format!("Hello {}", name)
}
The generated foreign-language bindings will use function parameters with default values. This works for the Kotlin, Swift and Python targets.
For example the generated Kotlin code will be equivalent to:
fun helloName(name: String = "world" ): String {
// ...
}
Async
Async functions can be exposed using the [Async]
attribute:
namespace Example {
[Async]
string async_hello();
}
See the Async/Future support section for details.