diff --git a/packages/quicktype-core/src/language/Golang/GolangRenderer.ts b/packages/quicktype-core/src/language/Golang/GolangRenderer.ts index 37cbfaf5e..42ea08d51 100644 --- a/packages/quicktype-core/src/language/Golang/GolangRenderer.ts +++ b/packages/quicktype-core/src/language/Golang/GolangRenderer.ts @@ -303,7 +303,9 @@ export class GoRenderer extends ConvenienceRenderer { const columns: Sourcelike[][] = []; this.forEachEnumCase(e, "none", (name, jsonName) => { columns.push([ - [name, " "], + this._options.enumTypeNameSuffix + ? [name, enumName, " "] + : [name, " "], [enumName, ' = "', stringEscape(jsonName), '"'], ]); }); diff --git a/packages/quicktype-core/src/language/Golang/language.ts b/packages/quicktype-core/src/language/Golang/language.ts index 0a096e4ec..556c2dc46 100644 --- a/packages/quicktype-core/src/language/Golang/language.ts +++ b/packages/quicktype-core/src/language/Golang/language.ts @@ -43,6 +43,11 @@ export const goOptions = { 'If set, all non-required objects will be tagged with ",omitempty"', false, ), + enumTypeNameSuffix: new BooleanOption( + "enum-type-name-suffix", + "Appends the type name to enum contracts", + false, + ), }; const golangLanguageConfig = { diff --git a/test/languages.ts b/test/languages.ts index b6d1304b1..8992f3bb4 100644 --- a/test/languages.ts +++ b/test/languages.ts @@ -581,6 +581,7 @@ export const GoLanguage: Language = { // fields preserve null instead of being omitted. ["omit-empty.json", { "omit-empty": "true" }], ["nullable-optional-one-of.schema", { "omit-empty": "true" }], + ["enum.schema", { "enum-type-name-suffix": "true" }], ], sourceFiles: ["src/language/Golang/index.ts"], }; diff --git a/test/unit/golang-enum-type-name-suffix.test.ts b/test/unit/golang-enum-type-name-suffix.test.ts new file mode 100644 index 000000000..d10540b49 --- /dev/null +++ b/test/unit/golang-enum-type-name-suffix.test.ts @@ -0,0 +1,40 @@ +import { describe, expect, test } from "vitest"; + +import { + InputData, + JSONSchemaInput, + quicktype, +} from "../../packages/quicktype-core/src/index.js"; + +async function renderGo(enumTypeNameSuffix: boolean): Promise { + const schemaInput = new JSONSchemaInput(undefined); + await schemaInput.addSource({ + name: "TreePart", + schema: JSON.stringify({ + type: "string", + enum: ["BARK", "LEAF", "ROOT"], + }), + }); + + const inputData = new InputData(); + inputData.addInput(schemaInput); + + const result = await quicktype({ + inputData, + lang: "go", + rendererOptions: { + "enum-type-name-suffix": enumTypeNameSuffix, + }, + }); + return result.lines.join("\n"); +} + +describe("Go enum-type-name-suffix", () => { + test("appends the enum type name to each constant when enabled", async () => { + const output = await renderGo(true); + + expect(output).toMatch(/BarkTreePart\s+TreePart = "BARK"/); + expect(output).toMatch(/LeafTreePart\s+TreePart = "LEAF"/); + expect(output).toMatch(/RootTreePart\s+TreePart = "ROOT"/); + }); +});