[Libguestfs] [libnbd PATCH 2/3] golang: Typesafe returns for REnum/RFlags

Eric Blake eblake at redhat.com
Sun Sep 6 01:40:59 UTC 2020


Now that we have a distinct branch in the generator when returning an
enum or bitmask that cannot fail, we can use it in Golang for
symmetry, so that the result of a get function can be plugged into a
set function without a trip through other types.
---
 generator/GoLang.ml                                  | 12 ++++++------
 .../libnbd/libnbd_110_defaults_test.go               |  6 +++---
 .../libnbd/libnbd_120_set_non_defaults_test.go       |  2 +-
 3 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/generator/GoLang.ml b/generator/GoLang.ml
index 732b81f..aecd2d5 100644
--- a/generator/GoLang.ml
+++ b/generator/GoLang.ml
@@ -99,8 +99,8 @@ let go_ret_type = function
    * always nil unless h is closed
    *)
   | RUInt -> Some "uint"
-  | REnum (_) -> Some "uint" (* XXX return typed constant instead? *)
-  | RFlags (_) -> Some "uint" (* XXX return typed constant instead? *)
+  | REnum ({ enum_prefix}) -> Some (camel_case enum_prefix)
+  | RFlags ({ flag_prefix}) -> Some (camel_case flag_prefix)

 let go_ret_error = function
   | RErr -> None
@@ -393,10 +393,10 @@ let print_binding (name, { args; optargs; ret; shortdesc }) =
       pr "    return &r, nil\n"
    | RUInt ->
       pr "    return uint (ret), nil\n"
-   | REnum (_) ->
-      pr "    return uint (ret), nil\n" (* XXX Proper enum type? *)
-   | RFlags (_) ->
-      pr "    return uint (ret), nil\n" (* XXX Proper bitmask type? *)
+   | REnum ({enum_prefix}) ->
+      pr "    return %s (ret), nil\n" (camel_case enum_prefix)
+   | RFlags ({flag_prefix}) ->
+      pr "    return %s (ret), nil\n" (camel_case flag_prefix)
   );
   pr "}\n";
   pr "\n"
diff --git a/golang/src/libguestfs.org/libnbd/libnbd_110_defaults_test.go b/golang/src/libguestfs.org/libnbd/libnbd_110_defaults_test.go
index 7b4ea0a..005289b 100644
--- a/golang/src/libguestfs.org/libnbd/libnbd_110_defaults_test.go
+++ b/golang/src/libguestfs.org/libnbd/libnbd_110_defaults_test.go
@@ -47,7 +47,7 @@ func Test110Defaults(t *testing.T) {
 	if err != nil {
 		t.Fatalf("could not get tls state: %s", err)
 	}
-	if tls != uint(TLS_DISABLE) {
+	if tls != TLS_DISABLE {
 		t.Fatalf("unexpected tls state")
 	}

@@ -63,8 +63,8 @@ func Test110Defaults(t *testing.T) {
 	if err != nil {
 		t.Fatalf("could not get handshake flags: %s", err)
 	}
-	if flags != uint(HANDSHAKE_FLAG_FIXED_NEWSTYLE |
-			 HANDSHAKE_FLAG_NO_ZEROES) {
+	if flags != (HANDSHAKE_FLAG_FIXED_NEWSTYLE |
+		     HANDSHAKE_FLAG_NO_ZEROES) {
 		t.Fatalf("unexpected handshake flags")
 	}

diff --git a/golang/src/libguestfs.org/libnbd/libnbd_120_set_non_defaults_test.go b/golang/src/libguestfs.org/libnbd/libnbd_120_set_non_defaults_test.go
index 331304e..685604e 100644
--- a/golang/src/libguestfs.org/libnbd/libnbd_120_set_non_defaults_test.go
+++ b/golang/src/libguestfs.org/libnbd/libnbd_120_set_non_defaults_test.go
@@ -64,7 +64,7 @@ func Test120SetNonDefaults(t *testing.T) {
 		if err != nil {
 			t.Fatalf("could not get tls state: %s", err)
 		}
-		if tls != uint(TLS_ALLOW) {
+		if tls != TLS_ALLOW {
 			t.Fatalf("unexpected tls state")
 		}
 	}
-- 
2.28.0




More information about the Libguestfs mailing list