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)); }
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); }
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()); }