in src/AutoRest.CSharp/Common/Decorator/ConstantSchemaTransformer.cs [13:63]
public static void Transform(CodeModel codeModel)
{
var constantSchemas = new HashSet<ConstantSchema>(codeModel.Schemas.Constants);
if (!constantSchemas.Any())
return;
Dictionary<ConstantSchema, ChoiceSchema> convertedChoiceSchemas = new();
foreach (var operation in codeModel.OperationGroups.SelectMany(og => og.Operations))
{
// change the schema on operations (only for optional)
foreach (var parameter in operation.Parameters)
{
if (parameter.IsRequired || parameter.Schema is not ConstantSchema constantSchema || ShouldSkipReplace(constantSchema))
continue;
var choiceSchema = ComputeIfAbsent(convertedChoiceSchemas, constantSchema, ConvertToChoiceSchema);
constantSchema.ValueType = choiceSchema;
operation.SignatureParameters.Add(parameter);
}
foreach (var request in operation.Requests)
{
foreach (var parameter in request.Parameters)
{
if (parameter.IsRequired || parameter.Schema is not ConstantSchema constantSchema || ShouldSkipReplace(constantSchema))
continue;
var choiceSchema = ComputeIfAbsent(convertedChoiceSchemas, constantSchema, ConvertToChoiceSchema);
constantSchema.ValueType = choiceSchema;
request.SignatureParameters.Add(parameter);
}
}
// change the schema on models (optional and required)
foreach (var obj in codeModel.Schemas.Objects)
{
foreach (var property in obj.Properties)
{
if (property.Schema is not ConstantSchema constantSchema || ShouldSkipReplace(constantSchema) || CheckPropertyExtension(property))
continue;
var choiceSchema = ComputeIfAbsent(convertedChoiceSchemas, constantSchema, ConvertToChoiceSchema);
constantSchema.ValueType = choiceSchema;
}
}
}
foreach (var choiceSchema in convertedChoiceSchemas.Values)
codeModel.Schemas.Choices.Add(choiceSchema);
}