From df0d847b30478995521fa4c3f795c6f8ef78b742 Mon Sep 17 00:00:00 2001 From: Timothee Guerin Date: Thu, 26 Sep 2024 14:13:17 -0700 Subject: [PATCH] Respect encoded name for examples (#4551) fix #4540 --- ...fix-examples-encoded-name-2024-8-26-12-52-20.md | 7 +++++++ packages/compiler/src/lib/examples.ts | 8 ++++++-- packages/compiler/test/decorators/examples.test.ts | 14 ++++++++++++++ 3 files changed, 27 insertions(+), 2 deletions(-) create mode 100644 .chronus/changes/fix-examples-encoded-name-2024-8-26-12-52-20.md diff --git a/.chronus/changes/fix-examples-encoded-name-2024-8-26-12-52-20.md b/.chronus/changes/fix-examples-encoded-name-2024-8-26-12-52-20.md new file mode 100644 index 0000000000..fb1dd64ee3 --- /dev/null +++ b/.chronus/changes/fix-examples-encoded-name-2024-8-26-12-52-20.md @@ -0,0 +1,7 @@ +--- +changeKind: fix +packages: + - "@typespec/compiler" +--- + +Json serialization of example respect `@encodedName` \ No newline at end of file diff --git a/packages/compiler/src/lib/examples.ts b/packages/compiler/src/lib/examples.ts index 7c0c31076a..58810d9b9a 100644 --- a/packages/compiler/src/lib/examples.ts +++ b/packages/compiler/src/lib/examples.ts @@ -10,7 +10,7 @@ import { type Type, type Value, } from "../core/types.js"; -import { getEncode, type EncodeData } from "./decorators.js"; +import { getEncode, resolveEncodedName, type EncodeData } from "./decorators.js"; /** * Serialize the given TypeSpec value as a JSON object using the given type and its encoding annotations. @@ -99,7 +99,11 @@ function serializeObjectValueAsJson( for (const propValue of value.properties.values()) { const definition = getPropertyOfType(type, propValue.name); if (definition) { - obj[propValue.name] = serializeValueAsJson(program, propValue.value, definition); + const name = + definition.kind === "ModelProperty" + ? resolveEncodedName(program, definition, "application/json") + : propValue.name; + obj[name] = serializeValueAsJson(program, propValue.value, definition); } } return obj; diff --git a/packages/compiler/test/decorators/examples.test.ts b/packages/compiler/test/decorators/examples.test.ts index dd2c0daa3d..4187243381 100644 --- a/packages/compiler/test/decorators/examples.test.ts +++ b/packages/compiler/test/decorators/examples.test.ts @@ -255,6 +255,20 @@ describe("json serialization of examples", () => { return serializeValueAsJson(program, examples[0].value, target); } + it("respect json encodedName", async () => { + const result = await getJsonValueOfExample(` + @example(#{ + expireIn: 1 + }) + @test model test { + @encodedName("application/json", "exp") + expireIn: int32 + } + `); + + expect(result).toEqual({ exp: 1 }); + }); + describe("scalar encoding", () => { const allCases: [ string,