summaryrefslogtreecommitdiff
path: root/lib9p/idl.gen
diff options
context:
space:
mode:
authorLuke T. Shumaker <lukeshu@lukeshu.com>2025-01-13 18:57:16 -0700
committerLuke T. Shumaker <lukeshu@lukeshu.com>2025-01-14 01:10:39 -0700
commite0fa36e9427424a1e68d4c196dd5249b1cef7e2c (patch)
treeac9186aaa617357e62a536a2bf0c180bc99b3dee /lib9p/idl.gen
parenta02f59f255006a2d6cb236fe2448b69c9c223adb (diff)
wip container typeslukeshu/9p-containers
Diffstat (limited to 'lib9p/idl.gen')
-rwxr-xr-xlib9p/idl.gen29
1 files changed, 29 insertions, 0 deletions
diff --git a/lib9p/idl.gen b/lib9p/idl.gen
index e796855..3271bb4 100755
--- a/lib9p/idl.gen
+++ b/lib9p/idl.gen
@@ -266,6 +266,35 @@ enum {idprefix}version {{
ret += "};\n"
ret += ifdef_pop(0)
+ ret += """
+/* container types ************************************************************/
+"""
+ ret += "\n"
+ ret += f"struct {idprefix}Tmsg {{\n"
+ ret += f"\tenum {idprefix}msg_type typ;\n"
+ ret += "\tunion {\n"
+ msgs = [msg for msg in typs if isinstance(msg, idl.Message) and msg.msgid % 2 == 0]
+ typewidth = max(len(c_typename(msg)) for msg in msgs)
+ for msg in msgs:
+ ret += ifdef_push(1, c_ver_ifdef(msg.in_versions))
+ ret += f"\t\t{c_typename(msg).ljust(typewidth)} {msg.name};\n"
+ ret += ifdef_pop(0)
+ ret += "\t} body;\n"
+ ret += "};\n"
+
+ ret += "\n"
+ ret += f"struct {idprefix}Rmsg {{\n"
+ ret += f"\tenum {idprefix}msg_type typ;\n"
+ ret += "\tunion {\n"
+ msgs = [msg for msg in typs if isinstance(msg, idl.Message) and msg.msgid % 2 == 1]
+ typewidth = max(len(c_typename(msg)) for msg in msgs)
+ for msg in msgs:
+ ret += ifdef_push(1, c_ver_ifdef(msg.in_versions))
+ ret += f"\t\t{c_typename(msg).ljust(typewidth)} {msg.name};\n"
+ ret += ifdef_pop(0)
+ ret += "\t} body;\n"
+ ret += "};\n"
+
return ret