in src/AutoRest.CSharp/Mgmt/Generation/OperationSourceWriter.cs [41:128]
public void Write()
{
using (_writer.Namespace($"{_opSource.Declaration.Namespace}"))
{
using (_writer.Scope($"{_opSource.Declaration.Accessibility} class {_opSource.Type:D} : {_opSource.Interface}"))
{
if (_opSource.IsReturningResource)
{
_writer.WriteField(_opSource.ArmClientField);
if (_operationIdMappings is not null)
{
using (_writer.Scope($"private readonly {typeof(Dictionary<string, string>)} _idMappings = new {typeof(Dictionary<string, string>)}()", start: "\t\t{", end: "\t\t};"))
{
_writer.Line($"\t\t\t{{ \"subscriptionId\", \"Microsoft.Resources/subscriptions\" }},");
_writer.Line($"\t\t\t{{ \"resourceGroupName\", \"Microsoft.Resources/resourceGroups\" }},");
foreach (var mapping in _operationIdMappings)
{
_writer.Line($"\t\t\t{{ \"{mapping.Key}\", \"{mapping.Value}\" }},");
}
}
}
_writer.Line();
using (_writer.WriteMethodDeclaration(_opSource.ArmClientCtor))
{
_writer.Line($"{_opSource.ArmClientField.Name} = {KnownParameters.ArmClient.Name};");
}
}
_writer.Line();
WriteCreateResult();
_writer.Line();
WriteCreateResultAsync();
if (_operationIdMappings is not null)
{
var resource = _opSource.Resource!;
var resourceType = resource.Type;
var dataType = resource.ResourceData.Type;
_writer.Line();
using (_writer.Scope($"private {dataType} ScrubId({dataType} data)"))
{
_writer.Line($"if (data.Id.ResourceType == {resourceType}.ResourceType)");
_writer.Line($"return data;");
_writer.Line();
_writer.Append($"var newId = {resourceType}.CreateResourceIdentifier(");
var createIdMethod = resource.CreateResourceIdentifierMethod.Signature;
foreach (var param in createIdMethod.Parameters)
{
_writer.Line();
_writer.Append($"\tGetName(\"{param.Name}\", data.Id),");
}
_writer.RemoveTrailingComma();
_writer.Line($");");
_writer.Line();
_writer.Line($"return new {dataType}(");
_writer.Line($"\tnewId,");
_writer.Line($"\tnewId.Name,");
_writer.Append($"\tnewId.ResourceType,");
foreach (var param in resource.ResourceData.SerializationConstructor.Signature.Parameters.Skip(3))
{
_writer.Line();
if (param.IsRawData)
{
_writer.Append($"\tnull");
}
else
{
_writer.Append($"\tdata.{param.Name.ToCleanName()},");
}
}
_writer.RemoveTrailingComma();
_writer.Line($");");
}
_writer.Line();
using (_writer.Scope($"private string GetName(string param, {typeof(ResourceIdentifier)} id)"))
{
_writer.Line($"while (id.ResourceType != _idMappings[param])");
_writer.Line($"id = id.Parent;");
_writer.Line($"return id.Name;");
}
}
}
}
}