private FeaturePercentileAllocation ParseFeaturePercentileAllocation()

in src/Microsoft.Extensions.Configuration.AzureAppConfiguration/FeatureManagement/FeatureManagementKeyValueAdapter.cs [1048:1129]


        private FeaturePercentileAllocation ParseFeaturePercentileAllocation(ref Utf8JsonReader reader, string settingKey)
        {
            var featurePercentileAllocation = new FeaturePercentileAllocation();

            while (reader.Read() && reader.TokenType != JsonTokenType.EndObject)
            {
                if (reader.TokenType != JsonTokenType.PropertyName)
                {
                    continue;
                }

                string percentileAllocationPropertyName = reader.GetString();

                switch (percentileAllocationPropertyName)
                {
                    case FeatureManagementConstants.Variant:
                        {
                            if (reader.Read() && reader.TokenType == JsonTokenType.String)
                            {
                                featurePercentileAllocation.Variant = reader.GetString();
                            }
                            else if (reader.TokenType != JsonTokenType.Null)
                            {
                                throw CreateFeatureFlagFormatException(
                                    FeatureManagementConstants.Variant,
                                    settingKey,
                                    reader.TokenType.ToString(),
                                    JsonTokenType.String.ToString());
                            }

                            break;
                        }

                    case FeatureManagementConstants.From:
                        {
                            if (reader.Read() &&
                                ((reader.TokenType == JsonTokenType.Number && reader.TryGetInt32(out int from)) ||
                                (reader.TokenType == JsonTokenType.String && int.TryParse(reader.GetString(), out from))))
                            {
                                featurePercentileAllocation.From = from;
                            }
                            else if (reader.TokenType != JsonTokenType.Null)
                            {
                                throw CreateFeatureFlagFormatException(
                                    FeatureManagementConstants.From,
                                    settingKey,
                                    reader.TokenType.ToString(),
                                    JsonTokenType.Number.ToString());
                            }

                            break;
                        }

                    case FeatureManagementConstants.To:
                        {
                            if (reader.Read() &&
                                ((reader.TokenType == JsonTokenType.Number && reader.TryGetInt32(out int to)) ||
                                (reader.TokenType == JsonTokenType.String && int.TryParse(reader.GetString(), out to))))
                            {
                                featurePercentileAllocation.To = to;
                            }
                            else if (reader.TokenType != JsonTokenType.Null)
                            {
                                throw CreateFeatureFlagFormatException(
                                    FeatureManagementConstants.To,
                                    settingKey,
                                    reader.TokenType.ToString(),
                                    JsonTokenType.Number.ToString());
                            }

                            break;
                        }

                    default:
                        reader.Skip();

                        break;
                }
            }

            return featurePercentileAllocation;
        }