From db226553579b3c8c55490ccc2f263fc9ce4f9f9f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Ebeling?= Date: Fri, 4 Sep 2026 15:04:15 +0200 Subject: [PATCH 1/2] feat(codegen): add support for enum to_string function generation --- codegen/xbot_codegen/xbot_codegen.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/codegen/xbot_codegen/xbot_codegen.py b/codegen/xbot_codegen/xbot_codegen.py index 657395e..71c1025 100644 --- a/codegen/xbot_codegen/xbot_codegen.py +++ b/codegen/xbot_codegen/xbot_codegen.py @@ -117,6 +117,7 @@ def loadService(path: str) -> dict: "base_type": enum["base_type"], "values": enum["values"], "bitmask": enum.get("bitmask", False), + "to_string": enum.get("to_string", False), }) # Transform the input definitions @@ -240,3 +241,17 @@ def generateEnums(service): for id, value in enum["values"].items(): cog.outl(f" {id} = {value},") cog.outl("};\n") + + if enum["to_string"]: + cog.outl(f"inline const char* {enum['id']}_to_string({enum['id']} v) {{") + cog.outl(" switch (v) {") + seen = set() + for name, value in enum["values"].items(): + if value in seen: + continue + seen.add(value) + cog.outl(f" case {enum['id']}::{name}: return \"{name.lower()}\";") + cog.outl(" default: return \"\";") + cog.outl(" }") + cog.outl("}") + From 43e6c778a6e1f9d267286bf32884f55759ded198 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Ebeling?= Date: Fri, 4 Sep 2026 15:22:39 +0200 Subject: [PATCH 2/2] feat(codegen): add enum count constant for to_string enums --- codegen/xbot_codegen/xbot_codegen.py | 1 + 1 file changed, 1 insertion(+) diff --git a/codegen/xbot_codegen/xbot_codegen.py b/codegen/xbot_codegen/xbot_codegen.py index 71c1025..b9db06c 100644 --- a/codegen/xbot_codegen/xbot_codegen.py +++ b/codegen/xbot_codegen/xbot_codegen.py @@ -243,6 +243,7 @@ def generateEnums(service): cog.outl("};\n") if enum["to_string"]: + cog.outl(f"inline constexpr size_t {enum['id']}_count = {max(enum['values'].values()) + 1};") cog.outl(f"inline const char* {enum['id']}_to_string({enum['id']} v) {{") cog.outl(" switch (v) {") seen = set()