public FlagSetInputEvaluator(InputValueDef inputDef, TypeRef resultTypeRef, RequestObjectBase anchor,
                              InputValueEvaluator[] valueEvals)
     : base(inputDef, resultTypeRef, anchor)
 {
     ElemEvaluators = valueEvals;
     EnumTypeDef    = (EnumTypeDef)ResultTypeRef.TypeDef;
 }
Exemple #2
0
        private void BuildEnumValues(EnumTypeDef enumTypeDef)
        {
            // enum values are static public fields of enum type
            var fields = enumTypeDef.ClrType.GetFields(BindingFlags.Public | BindingFlags.Static);

            foreach (var fld in fields)
            {
                var attrs      = GetAllAttributes(fld);
                var ignoreAttr = attrs.Find <IgnoreAttribute>();
                if (ignoreAttr != null)
                {
                    continue;
                }
                var fldValue  = fld.GetValue(null);
                var longValue = Convert.ToInt64(fldValue);
                if (longValue == 0 && enumTypeDef.IsFlagSet)
                {
                    continue; // ignore 'None=0' member in Flags enum
                }
                var enumV = new EnumValue()
                {
                    Name        = GetEnumFieldGraphQLName(fld), ClrValue = fldValue, ClrName = fldValue.ToString(), LongValue = longValue,
                    Attributes  = attrs,
                    Description = _docLoader.GetDocString(fld, enumTypeDef.ClrType)
                };
                enumV.Directives = BuildDirectivesFromAttributes(fld, DirectiveLocation.EnumValue, enumV);
                enumTypeDef.EnumValues.Add(enumV);
            }
        }
Exemple #3
0
        private void BuildEnumType(EnumTypeDef enumTypeDef)
        {
            var type_ = enumTypeDef.Type_;

            foreach (var enumV in enumTypeDef.EnumValues)
            {
                var enumV_ = new __EnumValue()
                {
                    Name = enumV.Name, Description = enumV.Description,
                };
                enumV.Intro_ = enumV_;
                type_.EnumValues.Add(enumV_);
            }
        }
Exemple #4
0
        private void BuildEnumType(EnumTypeDef enumTypeDef)
        {
            var type_ = enumTypeDef.Type_;

            foreach (var fld in enumTypeDef.Fields)
            {
                var enumV_ = new __EnumValue()
                {
                    Name = fld.Name, Description = fld.Description,
                };
                fld.Intro_ = enumV_;
                type_.EnumValues.Add(enumV_);
            }
        }
Exemple #5
0
 private void BuildEnumTypeFields(EnumTypeDef enumTypeDef)
 {
     enumTypeDef.Handler = new EnumHandler(enumTypeDef.ClrType, enumTypeDef.Module.Adjustments);
     enumTypeDef.Name    = enumTypeDef.Handler.EnumName;
     // Build fieldDefs from EnumInfo.Values
     foreach (var vi in enumTypeDef.Handler.Values)
     {
         var enumFld = new EnumFieldDef()
         {
             Name = vi.Name, ValueInfo = vi
         };
         enumFld.Description = _docLoader.GetDocString(enumFld.ValueInfo.Field, enumTypeDef.ClrType);
         enumFld.Directives  = this.BuildDirectivesFromAttributes(enumFld.ValueInfo.Field, DirectiveLocation.EnumValue);
         enumTypeDef.Fields.Add(enumFld);
     }
 }
        private object ReadEnum(RequestContext context, EnumTypeDef enumTypeDef, object jsonValue, IList <object> path)
        {
            var handler = enumTypeDef.Handler;
            var src     = path.FirstOrDefault()?.ToString();

            switch (jsonValue)
            {
            case JArray jArr:
                if (handler.IsFlagSet)
                {
                    var strArr = jArr.Select(v => v.ToString()).ToArray();
                    var enumV  = handler.ConvertStringListToFlagsEnumValue(strArr);
                    return(enumV);
                }
                else
                {
                    AddError(context, $"Enum {handler.EnumName} is not flag set, array input is invalid; around '{src}'.", path);
                    return(handler.NoneValue);
                }

            case JValue jv:
                if (jv.Value == null)
                {
                    return(null);
                }
                var enumVs = handler.ConvertStringToEnumValue(jv.Value.ToString());
                return(enumVs);

            case string sV:
                var enumV1 = handler.ConvertStringToEnumValue(sV);
                return(enumV1);

            default:
                AddError(context, $"Invalid value for enum {handler.EnumName}, around {src}.", path);
                return(handler.NoneValue);
            } //switch
        }