From f41d9a88c07226d107b56873bdbc801e484b524e Mon Sep 17 00:00:00 2001
From: "Luke T. Shumaker" <lukeshu@lukeshu.com>
Date: Fri, 14 Mar 2025 18:25:12 -0600
Subject: lib9p: Have all IDL-defined types implement fmt_formatter

---
 lib9p/protogen/c9util.py | 22 ++++++++++++++++++----
 1 file changed, 18 insertions(+), 4 deletions(-)

(limited to 'lib9p/protogen/c9util.py')

diff --git a/lib9p/protogen/c9util.py b/lib9p/protogen/c9util.py
index 85fd47b..cf91951 100644
--- a/lib9p/protogen/c9util.py
+++ b/lib9p/protogen/c9util.py
@@ -73,6 +73,20 @@ def ver_cond(versions: typing.Collection[str]) -> str:
 # misc #########################################################################
 
 
+def basename(typ: idl.UserType) -> str:
+    match typ:
+        case idl.Number():
+            return ident(typ.typname)
+        case idl.Bitfield():
+            return ident(typ.typname)
+        case idl.Message():
+            return ident(f"msg_{typ.typname}")
+        case idl.Struct():
+            return ident(typ.typname)
+        case _:
+            raise ValueError(f"not a defined type: {typ.__class__.__name__}")
+
+
 def typename(typ: idl.Type, parent: idl.StructMember | None = None) -> str:
     match typ:
         case idl.Primitive():
@@ -80,13 +94,13 @@ def typename(typ: idl.Type, parent: idl.StructMember | None = None) -> str:
                 return "[[gnu::nonstring]] char"
             return f"uint{typ.value*8}_t"
         case idl.Number():
-            return ident(f"{typ.typname}_t")
+            return f"{basename(typ)}_t"
         case idl.Bitfield():
-            return ident(f"{typ.typname}_t")
+            return f"{basename(typ)}_t"
         case idl.Message():
-            return f"struct {ident(f'msg_{typ.typname}')}"
+            return f"struct {basename(typ)}"
         case idl.Struct():
-            return f"struct {ident(typ.typname)}"
+            return f"struct {basename(typ)}"
         case _:
             raise ValueError(f"not a type: {typ.__class__.__name__}")
 
-- 
cgit v1.2.3-2-g168b