in src/AutoRest.CSharp/Common/Output/Builders/BicepSerializationMethodsBuilder.cs [546:631]
private static MethodBodyStatement SerializeFrameworkTypeValue(
StringBuilderExpression stringBuilder,
BicepValueSerialization valueSerialization,
ValueExpression expression,
string indent)
{
var frameworkType = valueSerialization.Type.FrameworkType;
if (frameworkType == typeof(Nullable<>))
{
frameworkType = valueSerialization.Type.Arguments[0].FrameworkType;
}
expression = expression.NullableStructValue(valueSerialization.Type);
if (frameworkType == typeof(Uri))
{
return stringBuilder.AppendLine(
new FormattableStringExpression($"{indent}'{{0}}'",
expression.Property(nameof(Uri.AbsoluteUri))));
}
if (frameworkType == typeof(string))
{
return new IfElseStatement(
new BoolExpression(
expression.Invoke(nameof(string.Contains),
new TypeReference(typeof(Environment)).Property(nameof(Environment.NewLine)))),
new[]
{
stringBuilder.AppendLine($"{indent}'''"),
stringBuilder.AppendLine(new FormattableStringExpression("{0}'''", expression))
},
stringBuilder.AppendLine(new FormattableStringExpression($"{indent}'{{0}}'", expression)));
}
if (frameworkType == typeof(int))
{
return stringBuilder.AppendLine(new FormattableStringExpression($"{indent}{{0}}", expression));
}
if (frameworkType == typeof(TimeSpan))
{
return new[]
{
Var(
"formattedTimeSpan",
new StringExpression(new InvokeStaticMethodExpression(typeof(TypeFormatters),
nameof(TypeFormatters.ToString), new[] { expression, Literal("P") })),
out var timeSpanVariable),
stringBuilder.AppendLine(new FormattableStringExpression(
$"{indent}'{{0}}'",
timeSpanVariable))
};
}
if (frameworkType == typeof(DateTimeOffset) || frameworkType == typeof(DateTime))
{
return new[]
{
Var(
"formattedDateTimeString",
new StringExpression(new InvokeStaticMethodExpression(typeof(TypeFormatters),
nameof(TypeFormatters.ToString), new[] { expression, Literal("o") })),
out var dateTimeStringVariable),
stringBuilder.AppendLine(new FormattableStringExpression(
$"{indent}'{{0}}'",
dateTimeStringVariable))
};
}
if (frameworkType == typeof(bool))
{
return new[]
{
Var(
"boolValue",
new StringExpression(new TernaryConditionalOperator(
Equal(expression, BoolExpression.True),
Literal("true"), Literal("false"))),
out var boolVariable),
stringBuilder.AppendLine(new FormattableStringExpression($"{indent}{{0}}", boolVariable))
};
}
return stringBuilder.AppendLine(new FormattableStringExpression($"{indent}'{{0}}'", expression.Invoke(nameof(ToString))));
}