Esempio n. 1
0
        internal static FieldInfo Build(IRootField rootField, string fieldName, string fieldNameDynamic, string typeName, Names names)
        {
            var fields = EmptyFields;

            if (rootField is IArrayField arrayField && arrayField.Fields.Count > 0)
            {
                var nestedNames = new Names();

                fields = new List <FieldInfo>(arrayField.Fields.Count);

                foreach (var field in arrayField.Fields)
                {
                    var nestedName = nestedNames[field];

                    fields.Add(new FieldInfo(field,
                                             nestedName,
                                             nestedNames[nestedName.AsDynamic()],
                                             $"{typeName}{field.TypeName()}",
                                             EmptyFields,
                                             names));
                }
            }

            return(new FieldInfo(rootField, fieldName, fieldNameDynamic, typeName, fields, names));
        }
Esempio n. 2
0
 private bool IsValidateableField(IRootField field)
 {
     return
         (field.Partitioning == Partitioning.Invariant &&
          field.RawProperties.Tags?.Contains(tag) == true &&
          (field.RawProperties is BooleanFieldProperties ||
           field.RawProperties is NumberFieldProperties ||
           field.RawProperties is ReferencesFieldProperties ||
           field.RawProperties is StringFieldProperties));
 }
Esempio n. 3
0
        private static ContentFieldData?ConvertData(FieldConverter[] converters, IRootField field, ContentFieldData data)
        {
            if (converters != null)
            {
                for (var i = 0; i < converters.Length; i++)
                {
                    data = converters[i](data !, field) !;

                    if (data == null)
                    {
                        break;
                    }
                }
            }

            return(data);
        }
Esempio n. 4
0
        private IValidator CreateFieldValidator(IRootField field, bool isPartial)
        {
            var partitioning = partitionResolver(field.Partitioning);

            var fieldValidator   = field.CreateValidator();
            var fieldsValidators = new Dictionary <string, (bool IsOptional, IValidator Validator)>();

            foreach (var partition in partitioning)
            {
                fieldsValidators[partition.Key] = (partition.IsOptional, fieldValidator);
            }

            return(new AggregateValidator(
                       field.CreateBagValidator()
                       .Union(Enumerable.Repeat(
                                  new ObjectValidator <IJsonValue>(fieldsValidators, isPartial, TypeName(field)), 1))));
        }
Esempio n. 5
0
        private IValidator CreateFieldValidator(IRootField field, bool isPartial)
        {
            var partitioning = partitionResolver(field.Partitioning);

            var fieldValidator   = new FieldValidator(ValidatorsFactory.CreateValidators(field).ToArray(), field);
            var fieldsValidators = new Dictionary <string, (bool IsOptional, IValidator Validator)>();

            foreach (var partition in partitioning)
            {
                fieldsValidators[partition.Key] = (partition.IsOptional, fieldValidator);
            }

            var isLanguage = field.Partitioning.Equals(Partitioning.Language);

            var type = isLanguage ? "language" : "invariant value";

            return(new ObjectValidator <IJsonValue>(fieldsValidators, isPartial, type, JsonValue.Null));
        }
Esempio n. 6
0
        private IValidator CreateFieldValidator(IRootField field, bool isPartial)
        {
            var fieldValidator = CreateFieldValidator(field);

            var partitioning           = partitionResolver(field.Partitioning);
            var partitioningValidators = new Dictionary <string, (bool IsOptional, IValidator Validator)>();

            foreach (var partitionKey in partitioning.AllKeys)
            {
                var optional = partitioning.IsOptional(partitionKey);

                partitioningValidators[partitionKey] = (optional, fieldValidator);
            }

            var typeName = partitioning.ToString() !;

            return(new AggregateValidator(
                       CreateFieldValidators(field)
                       .Union(Enumerable.Repeat(
                                  new ObjectValidator <IJsonValue>(partitioningValidators, isPartial, typeName), 1)), log));
        }
Esempio n. 7
0
        private static ClrValue TryGetValue(IRootField field, ContentData data)
        {
            var value = JsonValue.Null;

            if (data.TryGetValue(field.Name, out var fieldValue))
            {
                if (fieldValue.TryGetValue(InvariantPartitioning.Key, out var temp) && temp != null)
                {
                    value = temp;
                }
            }

            switch (field.RawProperties)
            {
            case BooleanFieldProperties when value is JsonBoolean boolean:
                return(boolean.Value);

            case BooleanFieldProperties when value is JsonNull:
                return(ClrValue.Null);

            case NumberFieldProperties when value is JsonNumber number:
                return(number.Value);

            case NumberFieldProperties when value is JsonNull:
                return(ClrValue.Null);

            case StringFieldProperties when value is JsonString @string:
                return(@string.Value);

            case StringFieldProperties when value is JsonNull:
                return(ClrValue.Null);

            case ReferencesFieldProperties when value is JsonArray array && array.FirstOrDefault() is JsonString @string:
                return(@string.Value);
            }

            return(null);
        }
Esempio n. 8
0
        internal static FieldInfo Build(IRootField rootField, string typeName, Names names, Names parentNames)
        {
            var fieldInfos = EmptyFields;

            if (rootField is IArrayField arrayField)
            {
                var fieldNames = new Names();

                fieldInfos = new List <FieldInfo>(arrayField.Fields.Count);

                foreach (var nestedField in arrayField.Fields.ForApi())
                {
                    fieldInfos.Add(new FieldInfo(
                                       nestedField,
                                       names[$"{typeName}{nestedField.TypeName()}"],
                                       names,
                                       fieldNames,
                                       EmptyFields));
                }
            }

            return(new FieldInfo(rootField, typeName, names, parentNames, fieldInfos));
        }
Esempio n. 9
0
 private static bool CanUpdateRoot(IRootField source, IRootField target)
 {
     return(CanUpdate(source, target) && source.Partitioning == target.Partitioning);
 }
Esempio n. 10
0
        private static string TypeName(IRootField field)
        {
            var isLanguage = field.Partitioning.Equals(Partitioning.Language);

            return(isLanguage ? "language" : "invariant value");
        }