/// <summary> /// Creates a scalar containing field /// </summary> /// <param name="name">The field name</param> /// <param name="type">The field type</param> /// <param name="flags">The field flags</param> /// <param name="arguments"> /// The arguments (if is set - this field becomes a method) /// </param> /// <param name="description"> /// The field description /// </param> /// <returns>The new field</returns> public static ApiField Scalar( [NotNull] string name, EnScalarType type, EnFieldFlags flags = EnFieldFlags.Queryable, IEnumerable <ApiField> arguments = null, string description = null) { if (type == EnScalarType.None) { throw new ArgumentException("Type cannot be None"); } if (flags.HasFlag(EnFieldFlags.IsConnection)) { throw new ArgumentException("Scalar field can't be used as connected objects"); } return(new ApiField(name, flags) { ScalarType = type, Description = description, Arguments = arguments != null ? new List <ApiField>(arguments) : new List <ApiField>() }); }
/// <summary> /// Initializes a new instance of the <see cref="MergedField"/> class. /// </summary> /// <param name="name"> /// The field name. /// </param> /// <param name="type"> /// The type. /// </param> /// <param name="provider"> /// The api provider for the field /// </param> /// <param name="field">The original field description</param> /// <param name="flags"> /// The flags. /// </param> /// <param name="arguments"> /// The field arguments (in case the field is method). /// </param> /// <param name="description"> /// The field description /// </param> public MergedField( string name, MergedType type, ApiProvider provider, ApiField field, EnFieldFlags flags = EnFieldFlags.None, IReadOnlyDictionary <string, MergedField> arguments = null, string description = null) { this.FieldName = name; this.Type = type; this.Flags = flags; this.Arguments = (arguments ?? new Dictionary <string, MergedField>()).ToImmutableDictionary(); this.Description = description; this.AddProvider(provider, field); }
/// <summary> /// Gets the generated arguments /// </summary> /// <returns>The list of arguments</returns> public static IEnumerable <ApiField> GetArguments() { if (FilterType.Fields.Count > 2) { yield return (FilterType.CreateField( "filter", EnFieldFlags.CanBeUsedInInput | EnFieldFlags.Queryable | EnFieldFlags.IsTypeArgument)); } if (SortType.Values.Any()) { const EnFieldFlags SortFlags = EnFieldFlags.CanBeUsedInInput | EnFieldFlags.Queryable | EnFieldFlags.IsTypeArgument | EnFieldFlags.IsArray; yield return(ApiField.Object("sort", SortType.TypeName, SortFlags)); } if (NodeMetaData.KeyProperty != null) { var keyMetadata = TypeMetadata.GenerateTypeMetadata( NodeMetaData.KeyProperty.PropertyType, NodeMetaData.KeyProperty.GetCustomAttribute <PublishToApiAttribute>()); if (keyMetadata.ScalarType != EnScalarType.None) { yield return (ApiField.Scalar( "id", keyMetadata.ScalarType, EnFieldFlags.CanBeUsedInInput | EnFieldFlags.Queryable | EnFieldFlags.IsTypeArgument)); } } yield return (ApiField.Scalar( "limit", EnScalarType.Integer, EnFieldFlags.CanBeUsedInInput | EnFieldFlags.Queryable | EnFieldFlags.IsTypeArgument)); yield return (ApiField.Scalar( "offset", EnScalarType.Integer, EnFieldFlags.CanBeUsedInInput | EnFieldFlags.Queryable | EnFieldFlags.IsTypeArgument)); }
/// <summary> /// Creates an object containing field /// </summary> /// <param name="name"> /// The field name /// </param> /// <param name="typeName"> /// The field type name /// </param> /// <param name="flags"> /// The field flags /// </param> /// <param name="arguments"> /// The arguments (if is set - this field becomes a method) /// </param> /// <param name="description"> /// The field description /// </param> /// <returns> /// The new field /// </returns> public static ApiField Object( [NotNull] string name, [NotNull] string typeName, EnFieldFlags flags = EnFieldFlags.Queryable, IEnumerable <ApiField> arguments = null, string description = null) { if (flags.HasFlag(EnFieldFlags.IsKey)) { throw new ArgumentException("Object field can't be used as key"); } return(new ApiField(name, flags) { TypeName = typeName, ScalarType = EnScalarType.None, Description = description, Arguments = arguments != null ? new List <ApiField>(arguments) : new List <ApiField>() }); }
/// <summary> /// Initializes a new instance of the <see cref="ApiMutation"/> class. /// </summary> /// <param name="name"> /// The name. /// </param> /// <param name="flags"> /// The flags. /// </param> protected ApiMutation(string name, EnFieldFlags flags) : base(name, flags) { }
/// <summary> /// Creates a field of this type /// </summary> /// <param name="name">The field name</param> /// <param name="flags">The list of field flags</param> /// <param name="description">The field description</param> /// <returns>The api filed</returns> public ApiField CreateField(string name, EnFieldFlags flags = EnFieldFlags.Queryable, string description = null) { return(ApiField.Object(name, this.TypeName, flags, description: description)); }
/// <summary> /// Creates virtual field /// </summary> /// <param name="name"> /// The field name /// </param> /// <param name="type"> /// The field type /// </param> /// <param name="resolver"> /// The field resolver /// </param> /// <param name="flags"> /// The field flags. /// </param> /// <returns> /// The field /// </returns> private FieldType CreateField(string name, MergedType type, IFieldResolver resolver = null, EnFieldFlags flags = EnFieldFlags.None) { var mergedField = new MergedField(name, type, this.Provider, null, flags); return(this.ConvertApiField(new KeyValuePair <string, MergedField>(name, mergedField), resolver)); }
/// <summary> /// Initializes a new instance of the <see cref="ApiField"/> class. /// </summary> /// <param name="name"> /// The name. /// </param> /// <param name="flags"> /// The flags. /// </param> protected ApiField(string name, EnFieldFlags flags) { this.Name = name; this.Flags = flags; }