For closure arguments to synchronous commands which has `cbkind`
`CBOnceCommand` or `CBManyCommand`, the requirement of the `'static`
lifetime is removed. This greatly simplifies the API for the user as the
user might otherwise have to use both an `Arc` and a `Mutex` when
calling for instance `opt_list()`.
---
 generator/Rust.ml | 14 +++++++++-----
 1 file changed, 9 insertions(+), 5 deletions(-)

diff --git a/generator/Rust.ml b/generator/Rust.ml
index 37582ac..96095a9 100644
--- a/generator/Rust.ml
+++ b/generator/Rust.ml
@@ -113,7 +113,7 @@ let rust_cbarg_name : cbarg -> string = function
   | CBArrayAndLen (arg, _) | CBMutable arg -> rust_arg_name arg
 
 (* Get the Rust type for an argument. *)
-let rec rust_arg_type : arg -> string = function
+let rec rust_arg_type ?(async_kind = None) : arg -> string = function
   | Bool _ -> "bool"
   | Int _ -> "c_int"
   | UInt _ -> "c_uint"
@@ -133,7 +133,10 @@ let rec rust_arg_type : arg -> string = function
   | BytesOut _ -> "&mut [u8]"
   | BytesPersistIn _ -> "&'static [u8]"
   | BytesPersistOut _ -> "&'static mut [u8]"
-  | Closure { cbargs; cbkind } -> "impl " ^ rust_closure_trait cbargs cbkind
+  | Closure { cbargs; cbkind } -> (
+      match async_kind with
+      | Some _ -> "impl " ^ rust_closure_trait cbargs cbkind
+      | None -> "impl " ^ rust_closure_trait cbargs cbkind ~lifetime:None)
 
 (* Get the Rust closure trait for a callback, That is `Fn*(...) -> ...)`. *)
 and rust_closure_trait ?(lifetime = Some "'static") cbargs cbkind : string =
@@ -160,8 +163,8 @@ and rust_cbarg_type : cbarg -> string = function
   | CBMutable arg -> "&mut " ^ rust_arg_type arg
 
 (* Get the type of a rust optional argument. *)
-let rust_optarg_type : optarg -> string = function
-  | OClosure x -> sprintf "Option<%s>" (rust_arg_type (Closure x))
+let rust_optarg_type ?(async_kind = None) : optarg -> string = function
+  | OClosure x -> sprintf "Option<%s>" (rust_arg_type (Closure x) ~async_kind)
   | OFlags (name, flags, _) ->
       sprintf "Option<%s>" (rust_arg_type (Flags (name, flags)))
 
@@ -549,7 +552,8 @@ let print_rust_handle_method ((name, call) : string * call) 
=
   let rust_args_names =
     List.map rust_arg_name call.args @ List.map rust_optarg_name call.optargs
   and rust_args_types =
-    List.map rust_arg_type call.args @ List.map rust_optarg_type call.optargs
+    List.map (rust_arg_type ~async_kind:call.async_kind) call.args
+    @ List.map (rust_optarg_type ~async_kind:call.async_kind) call.optargs
   in
   let rust_args =
     String.concat ", "
-- 
2.41.0

_______________________________________________
Libguestfs mailing list
Libguestfs@redhat.com
https://listman.redhat.com/mailman/listinfo/libguestfs

Reply via email to