in packages/autorest.go/src/m4togocodemodel/types.ts [174:229]
export function adaptModelField(prop: m4.Property, obj: m4.ObjectSchema): go.ModelField {
const fieldType = adaptPossibleType(prop.schema);
let required = prop.required === true;
if (go.isLiteralValue(fieldType)) {
// for OpenAPI, literal values are always considered required
required = true;
}
const annotations = new go.ModelFieldAnnotations(required, prop.readOnly === true, prop.language.go!.isAdditionalProperties === true, prop.isDiscriminator === true);
const field = new go.ModelField(prop.language.go!.name, fieldType, prop.language.go!.byValue === true, prop.serializedName, annotations);
if (hasDescription(prop.language.go!)) {
field.docs.description = prop.language.go!.description;
}
if (prop.isDiscriminator && obj.discriminatorValue) {
field.defaultValue = getDiscriminatorLiteral(obj.discriminatorValue);
} else if (prop.clientDefaultValue) {
if (!go.isLiteralValueType(field.type)) {
throw new Error(`unsupported default value type ${go.getTypeDeclaration(field.type)} for field ${field.name}`);
}
if (go.isConstantType(field.type)) {
// find the corresponding ConstantValue
const constType = types.get(field.type.name);
if (!constType) {
throw new Error(`didn't find ConstantType for ${field.type.name}`);
}
let found = false;
for (const val of values((<go.ConstantType>constType).values)) {
if (val.value === prop.clientDefaultValue) {
const keyName = `literal-${val.name}`;
let literalValue = types.get(keyName);
if (!literalValue) {
literalValue = new go.LiteralValue(field.type, val);
types.set(keyName, literalValue);
}
field.defaultValue = <go.LiteralValue>literalValue;
found = true;
break;
}
}
if (!found) {
throw new Error(`didn't find ConstantValue for ${prop.clientDefaultValue}`);
}
} else {
const keyName = `literal-${go.getTypeDeclaration(field.type)}-${prop.clientDefaultValue}`;
let literalValue = types.get(keyName);
if (!literalValue) {
literalValue = new go.LiteralValue(field.type, prop.clientDefaultValue);
types.set(keyName, literalValue);
}
field.defaultValue = <go.LiteralValue>literalValue;
}
}
field.xml = adaptXMLInfo(prop.schema);
return field;
}