{"record":{"id":"aa515bfcd3e5368f","repo":"OpenAPITools/openapi-generator","slug":"invalid-model-property-naming-s-must-be-origi","errorCode":null,"errorMessage":"Invalid model property naming '%s'. Must be 'original', 'camelCase', 'PascalCase' or 'snake_case'","messagePattern":"Invalid model property naming '(.+?)'\\. Must be 'original', 'camelCase', 'PascalCase' or 'snake_case'","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractFSharpCodegen.java","lineNumber":623,"sourceCode":"        return outputFolder + File.separator + sourceFolder + File.separator + apiPackage();\n    }\n\n    @Override\n    public String modelFileFolder() {\n        return outputFolder + File.separator + sourceFolder + File.separator + modelPackage();\n    }\n\n    @Override\n    public String toModelFilename(String name) {\n        // should be the same as the model name\n        return toModelName(name);\n    }\n\n    @Override\n    public String toOperationId(String operationId) {\n        // throw exception if method name is empty (should not occur as an auto-generated method name will be used)\n        if (StringUtils.isEmpty(operationId)) {\n            throw new RuntimeException(\"Empty method name (operationId) not allowed\");\n        }\n\n        // method name cannot use reserved keyword, e.g. return\n        if (isReservedWord(operationId)) {\n            LOGGER.warn(\"{} (reserved word) cannot be used as method name. Renamed to {}\", operationId, camelize(sanitizeName(\"call_\" + operationId)));\n            operationId = \"call_\" + operationId;\n        }\n\n        // operationId starts with a number\n        if (operationId.matches(\"^\\\\d.*\")) {\n            LOGGER.warn(\"{} (starting with a number) cannot be used as method name. Renamed to {}\", operationId, camelize(sanitizeName(\"call_\" + operationId)));\n            operationId = \"call_\" + operationId;\n        }\n\n        return camelize(sanitizeName(operationId));\n    }\n\n    public void setModelPropertyNaming(String naming) {","sourceCodeStart":605,"sourceCodeEnd":641,"githubUrl":"https://github.com/OpenAPITools/openapi-generator/blob/fcec517be3cf5b7964296bcba25fbc97541484e7/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractFSharpCodegen.java#L605-L641","documentation":"AbstractFSharpCodegen.setModelPropertyNaming (the message's real throw site, lines 641-649) throws IllegalArgumentException when the modelPropertyNaming option is not exactly 'original', 'camelCase', 'PascalCase' or 'snake_case'. The value arrives via additionalProperties/-p modelPropertyNaming=... and is compared by exact string match before being stored.","triggerScenarios":"Running an F# generator (e.g. -g fsharp-giraffe-server) with -p modelPropertyNaming=Pascalcase, snake-case, or any other casing/spelling slip: none of the four equals() checks match and the exception aborts option processing.","commonSituations":"Wrong casing ('camelcase', 'pascalCase'); hyphen instead of underscore ('snake-case'); copying a value valid in another generator (e.g. 'UPPERCASE', which F# does not accept) from a shared config or CI template.","solutions":["Use one of exactly: original, camelCase, PascalCase, snake_case (case-sensitive).","Fix hyphen/casing slips such as snake-case or camelcase.","If you need uppercase naming, check the F# generator's supported options — UPPERCASE is not among them; post-process instead."],"exampleFix":"# before:\nopenapi-generator-cli generate -g fsharp-giraffe-server -i api.yaml -p modelPropertyNaming=snake-case\n# after:\nopenapi-generator-cli generate -g fsharp-giraffe-server -i api.yaml -p modelPropertyNaming=snake_case","handlingStrategy":"type-guard","validationCode":"// Validate before passing the option\nif (!isModelPropertyNaming(opts.modelPropertyNaming)) {\n    throw new Error('modelPropertyNaming must be original, camelCase, PascalCase or snake_case');\n}","typeGuard":"const FSHARP_MODEL_PROPERTY_NAMING = ['original', 'camelCase', 'PascalCase', 'snake_case'] as const;\nexport type FSharpModelPropertyNaming = typeof FSHARP_MODEL_PROPERTY_NAMING[number];\nexport function isModelPropertyNaming(v: string): v is FSharpModelPropertyNaming {\n    return (FSHARP_MODEL_PROPERTY_NAMING as readonly string[]).includes(v);\n}","tryCatchPattern":null,"preventionTips":["Remember F# accepts exactly four values — UPPERCASE is not one of them.","Type the option in your build config so invalid values fail at config load, not mid-generation.","Watch for hyphen-vs-underscore and casing slips when porting options between generators."],"tags":["openapi","fsharp","naming","configuration","model-properties"],"backgroundTag":"invalid-model-property-naming","analyzedSha":"fcec517be3cf5b7964296bcba25fbc97541484e7","analyzedAt":"2026-08-22T11:13:11.613Z","schemaVersion":2},"datasetVersion":"2026-08-22T14:17:55.899Z"}