From 13c95f1dd25c70e0bbdbefe447c91f958a66b72d Mon Sep 17 00:00:00 2001 From: sandwoodK Date: Tue, 20 May 2025 09:38:58 +0200 Subject: [PATCH] Fix nim compilation in case a edge case of a schema with enum (#20780) If enum constraint contains one value which is not a valid nim identifier, we must surround this identifier with backtick. --- .../codegen/languages/NimClientCodegen.java | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/NimClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/NimClientCodegen.java index 3366bc33134..25501b96122 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/NimClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/NimClientCodegen.java @@ -355,15 +355,21 @@ public class NimClientCodegen extends DefaultCodegen implements CodegenConfig { } } + private boolean isValidIdentifier(String identifier) { + //see https://nim-lang.org/docs/manual.html#lexical-analysis-identifiers-amp-keywords + return identifier.matches("^(?:[A-Z]|[a-z]|[\\x80-\\xff])(_?(?:[A-Z]|[a-z]|[\\x80-\\xff]|[0-9]))*$"); + } + @Override public String toEnumVarName(String name, String datatype) { name = name.replace(" ", "_"); name = StringUtils.camelize(name); - if (name.matches("\\d.*")) { // starts with number - return "`" + name + "`"; - } else { + // starts with number or contains any character not allowed,see + if (isValidIdentifier(name)) { return name; + } else { + return "`" + name + "`"; } }