コード例 #1
0
            internal static string ToIdentifier(EvaluationReasonKind value)
            {
                switch (value)
                {
                case EvaluationReasonKind.Off:
                    return("OFF");

                case EvaluationReasonKind.Fallthrough:
                    return("FALLTHROUGH");

                case EvaluationReasonKind.TargetMatch:
                    return("TARGET_MATCH");

                case EvaluationReasonKind.RuleMatch:
                    return("RULE_MATCH");

                case EvaluationReasonKind.PrerequisiteFailed:
                    return("PREREQUISITE_FAILED");

                case EvaluationReasonKind.Error:
                    return("ERROR");

                default:
                    throw new ArgumentException();
                }
            }
コード例 #2
0
 internal EvaluationReason(EvaluationReasonKind kind, int ruleIndex, string ruleId, string prereqKey, EvaluationErrorKind errorKind)
 {
     _kind            = kind;
     _ruleIndex       = ruleIndex;
     _ruleId          = ruleId;
     _prerequisiteKey = prereqKey;
     _errorKind       = errorKind;
 }
コード例 #3
0
 internal EvaluationReason(
     EvaluationReasonKind kind,
     int?ruleIndex,
     string ruleId,
     string prereqKey,
     EvaluationErrorKind?errorKind,
     bool inExperiment,
     BigSegmentsStatus?bigSegmentsStatus
     )
 {
     _kind              = kind;
     _ruleIndex         = ruleIndex;
     _ruleId            = ruleId;
     _prerequisiteKey   = prereqKey;
     _errorKind         = errorKind;
     _inExperiment      = inExperiment;
     _bigSegmentsStatus = bigSegmentsStatus;
 }
コード例 #4
0
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            LdValue o = (LdValue)LdValueSerializer.Instance.ReadJson(reader, typeof(LdValue), LdValue.Null, serializer);

            if (o.IsNull)
            {
                return(null);
            }
            EvaluationReasonKind kind = (EvaluationReasonKind)Enum.Parse(typeof(EvaluationReasonKind), o.Get("kind").AsString);

            switch (kind)
            {
            case EvaluationReasonKind.OFF:
                return(EvaluationReason.OffReason);

            case EvaluationReasonKind.FALLTHROUGH:
                return(EvaluationReason.FallthroughReason);

            case EvaluationReasonKind.TARGET_MATCH:
                return(EvaluationReason.TargetMatchReason);

            case EvaluationReasonKind.RULE_MATCH:
                var index = o.Get("ruleIndex").AsInt;
                var id    = o.Get("ruleId").AsString;
                return(EvaluationReason.RuleMatchReason(index, id));

            case EvaluationReasonKind.PREREQUISITE_FAILED:
                var key = o.Get("prerequisiteKey").AsString;
                return(EvaluationReason.PrerequisiteFailedReason(key));

            case EvaluationReasonKind.ERROR:
                var errorKind = (EvaluationErrorKind)Enum.Parse(typeof(EvaluationErrorKind), o.Get("errorKind").AsString);
                return(EvaluationReason.ErrorReason(errorKind));
            }
            throw new ArgumentException();
        }
コード例 #5
0
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            JObject o = serializer.Deserialize <JObject>(reader);

            if (o == null)
            {
                return(null);
            }
            EvaluationReasonKind kind = o.GetValue("kind").ToObject <EvaluationReasonKind>();

            switch (kind)
            {
            case EvaluationReasonKind.OFF:
                return(EvaluationReason.OffReason);

            case EvaluationReasonKind.FALLTHROUGH:
                return(EvaluationReason.FallthroughReason);

            case EvaluationReasonKind.TARGET_MATCH:
                return(EvaluationReason.TargetMatchReason);

            case EvaluationReasonKind.RULE_MATCH:
                var index = (int)o.GetValue("ruleIndex");
                var id    = (string)o.GetValue("ruleId");
                return(EvaluationReason.RuleMatchReason(index, id));

            case EvaluationReasonKind.PREREQUISITE_FAILED:
                var key = (string)o.GetValue("prerequisiteKey");
                return(EvaluationReason.PrerequisiteFailedReason(key));

            case EvaluationReasonKind.ERROR:
                var errorKind = o.GetValue("errorKind").ToObject <EvaluationErrorKind>();
                return(EvaluationReason.ErrorReason(errorKind));
            }
            throw new ArgumentException();
        }
コード例 #6
0
            private static EvaluationReason?ReadJsonInternal(ref JReader reader, bool nullable)
            {
                var obj = (nullable ? reader.ObjectOrNull() : reader.Object())
                          .WithRequiredProperties(_requiredProperties);

                if (!obj.IsDefined)
                {
                    return(null);
                }
                try
                {
                    EvaluationReasonKind kind           = EvaluationReasonKind.Error;
                    int?   ruleIndex                    = null;
                    string ruleId                       = null;
                    string prerequisiteKey              = null;
                    EvaluationErrorKind?errorKind       = null;
                    bool inExperiment                   = false;
                    BigSegmentsStatus?bigSegmentsStatus = null;

                    while (obj.Next(ref reader))
                    {
                        var name = obj.Name;
                        if (name == "kind")
                        {
                            try
                            {
                                kind = EvaluationReasonKindConverter.FromIdentifier(reader.String());
                            }
                            catch (ArgumentException)
                            {
                                throw new SyntaxException("unsupported value for \"kind\"", 0);
                            }
                        }
                        else if (name == "ruleIndex")
                        {
                            ruleIndex = reader.Int();
                        }
                        else if (name == "ruleId")
                        {
                            ruleId = reader.String();
                        }
                        else if (name == "prerequisiteKey")
                        {
                            prerequisiteKey = reader.String();
                        }
                        else if (name == "errorKind")
                        {
                            try
                            {
                                errorKind = EvaluationErrorKindConverter.FromIdentifier(reader.String());
                            }
                            catch (ArgumentException)
                            {
                                throw new SyntaxException("unsupported value for \"errorKind\"", 0);
                            }
                        }
                        else if (name == "inExperiment")
                        {
                            inExperiment = reader.Bool();
                        }
                        else if (name == "bigSegmentsStatus")
                        {
                            try
                            {
                                bigSegmentsStatus = BigSegmentsStatusConverter.FromIdentifier(reader.String());
                            }
                            catch (ArgumentException)
                            {
                                throw new SyntaxException("unsupported value for \"bigSegmentsStatus\"", 0);
                            }
                        }
                    }

                    EvaluationReason reason;
                    switch (kind) // it's guaranteed to have a value, otherwise there'd be a required property error above
                    {
                    case EvaluationReasonKind.Off:
                        reason = EvaluationReason.OffReason;
                        break;

                    case EvaluationReasonKind.Fallthrough:
                        reason = EvaluationReason.FallthroughReason;
                        break;

                    case EvaluationReasonKind.TargetMatch:
                        reason = EvaluationReason.TargetMatchReason;
                        break;

                    case EvaluationReasonKind.RuleMatch:
                        reason = EvaluationReason.RuleMatchReason(ruleIndex ?? 0, ruleId);
                        break;

                    case EvaluationReasonKind.PrerequisiteFailed:
                        reason = EvaluationReason.PrerequisiteFailedReason(prerequisiteKey);
                        break;

                    case EvaluationReasonKind.Error:
                        reason = EvaluationReason.ErrorReason(errorKind ?? EvaluationErrorKind.Exception);
                        break;

                    default:
                        return(null);
                    }
                    if (inExperiment)
                    {
                        reason = reason.WithInExperiment(true);
                    }
                    if (bigSegmentsStatus.HasValue)
                    {
                        reason = reason.WithBigSegmentsStatus(bigSegmentsStatus);
                    }
                    return(reason);
                }
                catch (Exception e)
                {
                    throw reader.TranslateException(e);
                }
            }
コード例 #7
0
 public void WriteJsonValue(EvaluationReasonKind instance, IValueWriter writer) =>
 writer.String(ToIdentifier((EvaluationReasonKind)instance));