From f2974bdb20a1085b77e9ace49c987d7afed0e8ba Mon Sep 17 00:00:00 2001 From: AllyW Date: Mon, 27 Jan 2025 12:32:06 +0800 Subject: [PATCH 1/2] add support to literal type --- src/typespec-aaz/src/convertor.ts | 43 ++++++++++++++++++++++++++----- 1 file changed, 36 insertions(+), 7 deletions(-) diff --git a/src/typespec-aaz/src/convertor.ts b/src/typespec-aaz/src/convertor.ts index 8bb4be9a..b90c9577 100644 --- a/src/typespec-aaz/src/convertor.ts +++ b/src/typespec-aaz/src/convertor.ts @@ -10,7 +10,7 @@ import { DiagnosticTarget, Enum, EnumMember, Model, ModelProperty, Namespace, Pr import { LroMetadata, PagedResultMetadata, UnionEnum, getArmResourceIdentifierConfig, getLroMetadata, getPagedResult, getUnionAsEnum } from "@azure-tools/typespec-azure-core"; import { XmsPageable } from "./model/x_ms_pageable.js"; import { CMDHttpRequest, CMDHttpResponse } from "./model/http.js"; -import { CMDArraySchemaBase, CMDClsSchema, CMDClsSchemaBase, CMDObjectSchema, CMDObjectSchemaBase, CMDSchema, CMDSchemaBase, CMDStringSchema, CMDStringSchemaBase, CMDIntegerSchemaBase, Ref, ClsType, ArrayType, CMDObjectSchemaDiscriminator, CMDByteSchemaBase, CMDInteger32SchemaBase, CMDInteger64SchemaBase, CMDFloatSchemaBase, CMDFloat64SchemaBase, CMDFloat32SchemaBase, CMDUuidSchemaBase, CMDPasswordSchemaBase, CMDResourceIdSchemaBase, CMDDateSchemaBase, CMDDateTimeSchemaBase, CMDDurationSchemaBase, CMDResourceLocationSchema, CMDIdentityObjectSchemaBase} from "./model/schema.js"; +import { CMDArraySchemaBase, CMDClsSchema, CMDClsSchemaBase, CMDObjectSchema, CMDObjectSchemaBase, CMDSchema, CMDSchemaBase, CMDStringSchema, CMDStringSchemaBase, CMDIntegerSchemaBase, Ref, ClsType, ArrayType, CMDObjectSchemaDiscriminator, CMDByteSchemaBase, CMDInteger32SchemaBase, CMDInteger64SchemaBase, CMDFloatSchemaBase, CMDFloat64SchemaBase, CMDFloat32SchemaBase, CMDUuidSchemaBase, CMDPasswordSchemaBase, CMDResourceIdSchemaBase, CMDDateSchemaBase, CMDDateTimeSchemaBase, CMDDurationSchemaBase, CMDResourceLocationSchema, CMDIdentityObjectSchemaBase, CMDBooleanSchemaBase} from "./model/schema.js"; import { reportDiagnostic } from "./lib.js"; import { getExtensions, @@ -516,9 +516,11 @@ function convert2CMDSchema(context: AAZSchemaEmitterContext, param: ModelPropert schema = convert2CMDSchemaBase(context, param.type as Enum); break; // TODO: handle Literals - // case "Number": - // case "String": - // case "Boolean": + case "Number": + case "String": + case "Boolean": + schema = convert2CMDSchemaBase(context, param.type); + break; // case "Tuple": default: reportDiagnostic(context.program, { code: "Unsupported-Type", target: param.type }); @@ -578,9 +580,11 @@ function convert2CMDSchemaBase(context: AAZSchemaEmitterContext, type: Type): CM schema = convertEnum2CMDSchemaBase(context, type as Enum); break; // TODO: handle Literals - // case "Number": - // case "String": - // case "Boolean": + case "Number": + case "String": + case "Boolean": + schema = convertLiteral2CMDSchemaBase(type); + break; // case "Tuple": default: reportDiagnostic(context.program, { code: "Unsupported-Type", target: type }); @@ -1204,6 +1208,31 @@ function isAzureResourceOverall(context: AAZSchemaEmitterContext, model: Model): return !!isResource; } +function convertLiteral2CMDSchemaBase(type: Type): CMDStringSchemaBase | CMDIntegerSchemaBase | CMDBooleanSchemaBase | undefined { + switch (type.kind) { + case "Number": + return { + type: "integer", + enum: { + items: [{value: type.value}] + } + }; + case "String": + return { + type: "string", + enum: { + items: [{value: type.value}] + } + }; + case "Boolean": + return { + type: "boolean" + }; + default: + return undefined; + } +} + // Return any string literal values for type function getStringValues(type: Type): string[] { switch (type.kind) { From 6585b98c648662f419e4c23819f064214138d6bd Mon Sep 17 00:00:00 2001 From: AllyW Date: Thu, 6 Feb 2025 13:55:30 +0800 Subject: [PATCH 2/2] split integer and float for literal value --- src/typespec-aaz/src/convertor.ts | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/src/typespec-aaz/src/convertor.ts b/src/typespec-aaz/src/convertor.ts index b90c9577..bb9327f5 100644 --- a/src/typespec-aaz/src/convertor.ts +++ b/src/typespec-aaz/src/convertor.ts @@ -583,7 +583,7 @@ function convert2CMDSchemaBase(context: AAZSchemaEmitterContext, type: Type): CM case "Number": case "String": case "Boolean": - schema = convertLiteral2CMDSchemaBase(type); + schema = convertLiteral2CMDSchemaBase(context, type); break; // case "Tuple": default: @@ -1208,15 +1208,24 @@ function isAzureResourceOverall(context: AAZSchemaEmitterContext, model: Model): return !!isResource; } -function convertLiteral2CMDSchemaBase(type: Type): CMDStringSchemaBase | CMDIntegerSchemaBase | CMDBooleanSchemaBase | undefined { +function convertLiteral2CMDSchemaBase(context: AAZSchemaEmitterContext, type: Type): CMDStringSchemaBase | CMDIntegerSchemaBase | CMDFloatSchemaBase | CMDBooleanSchemaBase | undefined { switch (type.kind) { case "Number": - return { - type: "integer", - enum: { - items: [{value: type.value}] - } - }; + if (type.numericValue.isInteger) { + return { + type: "integer", + enum: { + items: [{value: type.value}] + } + }; + } else { + return { + type: "float", + enum: { + items: [{value: type.value}] + } + }; + } case "String": return { type: "string",