in uniffi_bindgen/src/pipeline/general/callback_interfaces.rs [246:287]
fn vtable_method_async(
module_name: &str,
interface_name: &str,
method_name: String,
async_data: &AsyncData,
callable: &Callable,
) -> Result<FfiDefinition> {
Ok(FfiFunctionType {
name: FfiFunctionTypeName(method_name),
arguments: std::iter::once(FfiArgument {
name: "uniffi_handle".into(),
ty: FfiType::Handle(HandleKind::CallbackInterface {
module_name: module_name.to_string(),
interface_name: interface_name.to_string(),
}),
})
.chain(callable.arguments.iter().map(|arg| FfiArgument {
name: arg.name.clone(),
ty: arg.ty.ffi_type.clone(),
}))
.chain([
FfiArgument {
name: "uniffi_future_callback".into(),
ty: FfiType::Function(async_data.ffi_foreign_future_complete.clone()),
},
FfiArgument {
name: "uniffi_callback_data".into(),
ty: FfiType::Handle(HandleKind::ForeignFutureCallbackData),
},
FfiArgument {
name: "uniffi_out_return".into(),
ty: FfiType::MutReference(Box::new(FfiType::Struct(FfiStructName(
"ForeignFuture".to_owned(),
)))),
},
])
.collect(),
has_rust_call_status_arg: false,
return_type: FfiReturnType { ty: None },
}
.into())
}