public static FormattableString GetFrameworkTypeValueFormattable()

in src/AutoRest.CSharp/Common/Generation/Writers/JsonCodeWriterExtensions.cs [45:158]


        public static FormattableString GetFrameworkTypeValueFormattable(Type frameworkType, FormattableString element, SerializationFormat format, CSharpType? serializationType)
        {
            bool includeFormat = false;

            if (frameworkType == typeof(ETag) ||
                frameworkType == typeof(Uri) ||
                frameworkType == typeof(ResourceIdentifier) ||
                frameworkType == typeof(ResourceType) ||
                frameworkType == typeof(ContentType) ||
                frameworkType == typeof(RequestMethod) ||
                frameworkType == typeof(AzureLocation))
            {
                return $"new {frameworkType}({element}.GetString())";
            }

            if (frameworkType == typeof(IPAddress))
            {
                return $"{frameworkType}.Parse({element}.GetString())";
            }

            var methodName = string.Empty;
            if (frameworkType == typeof(BinaryData))
            {
                switch (format)
                {
                    case SerializationFormat.Bytes_Base64: //intentional fall through
                    case SerializationFormat.Bytes_Base64Url:
                        return $"{typeof(BinaryData)}.FromBytes({element}.GetBytesFromBase64(\"{format.ToFormatSpecifier()}\"))";
                    default:
                        return $"{typeof(BinaryData)}.FromString({element}.GetRawText())";
                }
            }

            if (frameworkType == typeof(TimeSpan))
            {
                if (format is SerializationFormat.Duration_Seconds)
                {
                    return $"{typeof(TimeSpan)}.FromSeconds({element}.GetInt32())";
                }
                else if (format is SerializationFormat.Duration_Seconds_Float or SerializationFormat.Duration_Seconds_Double)
                {
                    return $"{typeof(TimeSpan)}.FromSeconds({element}.GetDouble())";
                }
            }

            if (frameworkType == typeof(DateTimeOffset))
            {
                if (format == SerializationFormat.DateTime_Unix)
                {
                    return $"{typeof(DateTimeOffset)}.FromUnixTimeSeconds({element}.GetInt64())";
                }
            }

            if (IsCustomJsonConverterAdded(frameworkType))
            {
                return $"{typeof(JsonSerializer)}.{nameof(JsonSerializer.Deserialize)}<{serializationType}>({element}.GetRawText())";
            }

            if (frameworkType == typeof(JsonElement))
                methodName = "Clone";
            if (frameworkType == typeof(object))
                methodName = "GetObject";
            if (frameworkType == typeof(bool))
                methodName = "GetBoolean";
            if (frameworkType == typeof(char))
                methodName = "GetChar";
            if (frameworkType == typeof(short))
                methodName = "GetInt16";
            if (frameworkType == typeof(int))
                methodName = "GetInt32";
            if (frameworkType == typeof(long))
                methodName = "GetInt64";
            if (frameworkType == typeof(float))
                methodName = "GetSingle";
            if (frameworkType == typeof(double))
                methodName = "GetDouble";
            if (frameworkType == typeof(decimal))
                methodName = "GetDecimal";
            if (frameworkType == typeof(string))
                methodName = "GetString";
            if (frameworkType == typeof(Guid))
                methodName = "GetGuid";

            if (frameworkType == typeof(byte[]))
            {
                methodName = "GetBytesFromBase64";
                includeFormat = true;
            }

            if (frameworkType == typeof(DateTimeOffset))
            {
                methodName = "GetDateTimeOffset";
                includeFormat = true;
            }

            if (frameworkType == typeof(DateTime))
            {
                methodName = "GetDateTime";
                includeFormat = true;
            }

            if (frameworkType == typeof(TimeSpan))
            {
                methodName = "GetTimeSpan";
                includeFormat = true;
            }

            if (includeFormat && format.ToFormatSpecifier() is { } formatString)
            {
                return $"{element}.{methodName}({formatString:L})";
            }

            return $"{element}.{methodName}()";
        }