in packages/autorest.go/src/m4togocodemodel/types.ts [498:586]
function adaptLiteralValue(constSchema: m4.ConstantSchema): go.LiteralValue {
switch (constSchema.valueType.type) {
case m4.SchemaType.Boolean: {
const keyName = `literal-${m4.SchemaType.Boolean}-${constSchema.value.value}`;
let literalBool = types.get(keyName);
if (literalBool) {
return <go.LiteralValue>literalBool;
}
literalBool = new go.LiteralValue(new go.PrimitiveType('bool'), constSchema.value.value);
types.set(keyName, literalBool);
return literalBool;
}
case m4.SchemaType.ByteArray: {
const keyName = `literal-${m4.SchemaType.ByteArray}-${constSchema.value.value}`;
let literalByteArray = types.get(keyName);
if (literalByteArray) {
return <go.LiteralValue>literalByteArray;
}
literalByteArray = new go.LiteralValue(adaptBytesType(<m4.ByteArraySchema>constSchema.valueType), constSchema.value.value);
types.set(keyName, literalByteArray);
return literalByteArray;
}
case m4.SchemaType.Choice:
case m4.SchemaType.SealedChoice: {
const keyName = `literal-${constSchema.language.go!.name}-${constSchema.value.value}`;
let literalConst = types.get(keyName);
if (literalConst) {
return <go.LiteralValue>literalConst;
}
literalConst = new go.LiteralValue(adaptConstantType(<m4.ChoiceSchema>constSchema.valueType), constSchema.value.value);
types.set(keyName, literalConst);
return literalConst;
}
case m4.SchemaType.Date:
case m4.SchemaType.DateTime:
case m4.SchemaType.UnixTime: {
const keyName = `literal-${constSchema.valueType.language.go!.internalTimeType}-${constSchema.value.value}`;
let literalTime = types.get(keyName);
if (literalTime) {
return <go.LiteralValue>literalTime;
}
literalTime = new go.LiteralValue(new go.TimeType(constSchema.valueType.language.go!.internalTimeType, false), constSchema.value.value);
types.set(keyName, literalTime);
return literalTime;
}
case m4.SchemaType.Integer: {
const keyName = `literal-int${(<m4.NumberSchema>constSchema.valueType).precision}-${constSchema.value.value}`;
let literalInt = types.get(keyName);
if (literalInt) {
return <go.LiteralValue>literalInt;
}
if ((<m4.NumberSchema>constSchema.valueType).precision === 32) {
literalInt = new go.LiteralValue(new go.PrimitiveType('int32'), constSchema.value.value);
} else {
literalInt = new go.LiteralValue(new go.PrimitiveType('int64'), constSchema.value.value);
}
types.set(keyName, literalInt);
return literalInt;
}
case m4.SchemaType.Number: {
const keyName = `literal-float${(<m4.NumberSchema>constSchema.valueType).precision}-${constSchema.value.value}`;
let literalFloat = types.get(keyName);
if (literalFloat) {
return <go.LiteralValue>literalFloat;
}
if ((<m4.NumberSchema>constSchema.valueType).precision === 32) {
literalFloat = new go.LiteralValue(new go.PrimitiveType('float32'), constSchema.value.value);
} else {
literalFloat = new go.LiteralValue(new go.PrimitiveType('float64'), constSchema.value.value);
}
types.set(keyName, literalFloat);
return literalFloat;
}
case m4.SchemaType.String:
case m4.SchemaType.Duration:
case m4.SchemaType.Uuid: {
const keyName = `literal-string-${constSchema.value.value}`;
let literalString = types.get(keyName);
if (literalString) {
return <go.LiteralValue>literalString;
}
literalString = new go.LiteralValue(new go.PrimitiveType('string'), constSchema.value.value);
types.set(keyName, literalString);
return literalString;
}
default:
throw new Error(`unsupported scheam type ${constSchema.valueType.type} for LiteralValue`);
}
}