public object ReadJson(ref JReader reader)
        {
            var valid = true;
            var flags = new Dictionary <string, FlagState>();

            for (var topLevelObj = reader.Object(); topLevelObj.Next(ref reader);)
            {
                var key = topLevelObj.Name.ToString();
                switch (key)
                {
                case "$valid":
                    valid = reader.Bool();
                    break;

                case "$flagsState":
                    for (var flagsObj = reader.Object(); flagsObj.Next(ref reader);)
                    {
                        var subKey = flagsObj.Name.ToString();
                        var flag   = flags.ContainsKey(subKey) ? flags[subKey] : new FlagState();
                        for (var metaObj = reader.Object(); metaObj.Next(ref reader);)
                        {
                            switch (metaObj.Name.ToString())
                            {
                            case "variation":
                                flag.Variation = reader.IntOrNull();
                                break;

                            case "version":
                                flag.Version = reader.IntOrNull();
                                break;

                            case "trackEvents":
                                flag.TrackEvents = reader.Bool();
                                break;

                            case "debugEventsUntilDate":
                                var n = reader.LongOrNull();
                                flag.DebugEventsUntilDate = n.HasValue ? UnixMillisecondTime.OfMillis(n.Value) :
                                                            (UnixMillisecondTime?)null;
                                break;

                            case "reason":
                                flag.Reason = EvaluationReasonConverter.ReadJsonNullableValue(ref reader);
                                break;
                            }
                        }
                        flags[subKey] = flag;
                    }
                    break;

                default:
                    var flagForValue = flags.ContainsKey(key) ? flags[key] : new FlagState();
                    flagForValue.Value = LdValueConverter.ReadJsonValue(ref reader);
                    flags[key]         = flagForValue;
                    break;
                }
            }
            return(new FeatureFlagsState(valid, flags));
        }
Esempio n. 2
0
        internal static ImmutableList <LdValue> ReadValues(ref JReader r)
        {
            var builder = ImmutableList.CreateBuilder <LdValue>();

            for (var arr = r.ArrayOrNull(); arr.Next(ref r);)
            {
                builder.Add(LdValueConverter.ReadJsonValue(ref r));
            }
            return(builder.ToImmutable());
        }
        private static FullDataSet <ItemDescriptor> ParseJson(ref JReader r, int version)
        {
            var flagsBuilder    = ImmutableList.CreateBuilder <KeyValuePair <string, ItemDescriptor> >();
            var segmentsBuilder = ImmutableList.CreateBuilder <KeyValuePair <string, ItemDescriptor> >();

            for (var obj = r.Object(); obj.Next(ref r);)
            {
                switch (obj.Name.ToString())
                {
                case "flags":
                    for (var subObj = r.ObjectOrNull(); subObj.Next(ref r);)
                    {
                        var key  = subObj.Name.ToString();
                        var flag = FeatureFlagSerialization.Instance.ReadJson(ref r) as FeatureFlag;
                        flagsBuilder.Add(new KeyValuePair <string, ItemDescriptor>(key, new ItemDescriptor(version,
                                                                                                           FlagWithVersion(flag, version))));
                    }
                    break;

                case "flagValues":
                    for (var subObj = r.ObjectOrNull(); subObj.Next(ref r);)
                    {
                        var key   = subObj.Name.ToString();
                        var value = LdValueConverter.ReadJsonValue(ref r);
                        var flag  = FlagWithValue(key, value, version);
                        flagsBuilder.Add(new KeyValuePair <string, ItemDescriptor>(key, new ItemDescriptor(version, flag)));
                    }
                    break;

                case "segments":
                    for (var subObj = r.ObjectOrNull(); subObj.Next(ref r);)
                    {
                        var key     = subObj.Name.ToString();
                        var segment = SegmentSerialization.Instance.ReadJson(ref r) as Segment;
                        segmentsBuilder.Add(new KeyValuePair <string, ItemDescriptor>(key, new ItemDescriptor(version,
                                                                                                              SegmentWithVersion(segment, version))));
                    }
                    break;
                }
            }
            return(new FullDataSet <ItemDescriptor>(ImmutableList.Create <KeyValuePair <DataKind, KeyedItems <ItemDescriptor> > >(
                                                        new KeyValuePair <DataKind, KeyedItems <ItemDescriptor> >(DataModel.Features,
                                                                                                                  new KeyedItems <ItemDescriptor>(flagsBuilder.ToImmutable())),
                                                        new KeyValuePair <DataKind, KeyedItems <ItemDescriptor> >(DataModel.Segments,
                                                                                                                  new KeyedItems <ItemDescriptor>(segmentsBuilder.ToImmutable()))
                                                        )));
        }
        private static FlagFileData ParseJson(ref JReader r)
        {
            var ret = new FlagFileData
            {
                Flags      = new Dictionary <string, FeatureFlag>(),
                FlagValues = new Dictionary <string, LdValue>(),
                Segments   = new Dictionary <string, Segment>()
            };

            for (var obj = r.Object(); obj.Next(ref r);)
            {
                switch (obj.Name.ToString())
                {
                case "flags":
                    for (var subObj = r.ObjectOrNull(); subObj.Next(ref r);)
                    {
                        ret.Flags[subObj.Name.ToString()] = FeatureFlagSerialization.Instance.ReadJson(ref r) as FeatureFlag;
                    }
                    break;

                case "flagValues":
                    for (var subObj = r.ObjectOrNull(); subObj.Next(ref r);)
                    {
                        ret.FlagValues[subObj.Name.ToString()] = LdValueConverter.ReadJsonValue(ref r);
                    }
                    break;

                case "segments":
                    for (var subObj = r.ObjectOrNull(); subObj.Next(ref r);)
                    {
                        ret.Segments[subObj.Name.ToString()] = SegmentSerialization.Instance.ReadJson(ref r) as Segment;
                    }
                    break;
                }
            }
            return(ret);
        }
Esempio n. 5
0
            public object ReadJson(ref JReader reader)
            {
                var obj = reader.ObjectOrNull().WithRequiredProperties(_requiredProperties);

                if (!obj.IsDefined)
                {
                    return(null);
                }
                var builder = User.Builder("");

                try
                {
                    while (obj.Next(ref reader))
                    {
                        switch (obj.Name.ToString())
                        {
                        case "key":
                            builder.Key(reader.String());
                            break;

                        case "secondary":
                            builder.Secondary(reader.StringOrNull());
                            break;

                        case "ip":
                            builder.IPAddress(reader.StringOrNull());
                            break;

                        case "country":
                            builder.Country(reader.StringOrNull());
                            break;

                        case "firstName":
                            builder.FirstName(reader.StringOrNull());
                            break;

                        case "lastName":
                            builder.LastName(reader.StringOrNull());
                            break;

                        case "name":
                            builder.Name(reader.StringOrNull());
                            break;

                        case "avatar":
                            builder.Avatar(reader.StringOrNull());
                            break;

                        case "email":
                            builder.Email(reader.StringOrNull());
                            break;

                        case "anonymous":
                            builder.AnonymousOptional(reader.BoolOrNull());
                            break;

                        case "custom":
                            for (var customObj = reader.ObjectOrNull(); customObj.Next(ref reader);)
                            {
                                builder.Custom(customObj.Name.ToString(),
                                               LdValueConverter.ReadJsonValue(ref reader));
                            }
                            break;

                        case "privateAttributeNames":
                            var internalBuilder = builder as UserBuilder;
                            for (var arr = reader.ArrayOrNull(); arr.Next(ref reader);)
                            {
                                internalBuilder.AddPrivateAttribute(reader.String());
                            }
                            break;
                        }
                    }
                }
                catch (Exception e)
                {
                    throw reader.TranslateException(e);
                }
                return(builder.Build());
            }