fn vtable_method_async()

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())
}