private IApiItemBuilder <TItem> AddField <TItem, TField>(IApiItemBuilder <TItem> builder, Expression <Func <TItem, TField> > expression, int nesting) { IApiFieldBuilder <TItem, TField> fieldBuilder = builder.Field(expression); if (_configuration.AllowWrite) { fieldBuilder.AllowWrite(); } if (nesting >= _configuration.MaxNesting) { return(builder); } if (typeof(TField).GetConstructor(new Type[0]) != null) { Reflect.Instance(this) .GetMethod(nameof(AddFieldAsItem)) .MakeGeneric <TItem, TField>() .Invoke(fieldBuilder, nesting); } Type enumNav = typeof(TField).GetGenericInterface(typeof(ICollection <>))?.GetGenericArguments()[0]; if (enumNav != null) { Reflect.Instance(this) .GetMethod(nameof(AddFieldAsCollection)) .MakeGeneric(typeof(TItem), typeof(TField), enumNav) .Invoke(fieldBuilder, nesting); } return(builder); }
private void AddFieldAsItem <TItem, TField>(IApiFieldBuilder <TItem, TField> fieldBuilder, int nesting) where TField : class, new() { var subItemBuilder = fieldBuilder.IsItem <TField>(); AddNestedItem <TField>(subItemBuilder, nesting + 1); }
private void AddFieldAsCollection <TItem, TField, TNav>(IApiFieldBuilder <TItem, TField> fieldBuilder, int nesting) where TField : class, IEnumerable <TNav> where TNav : class, new() { var subItemBuilder = fieldBuilder.IsCollection <TField, TNav>(); AddNestedItem <TNav>(subItemBuilder, nesting + 1); }
public static IApiFieldBuilder <TItem, TNavItem> IsItem <TItem, TNavItem>(this IApiFieldBuilder <TItem, TNavItem> builder, [NotNull] Action <IApiItemBuilder <TNavItem> > configureAction) where TNavItem : class, new() { builder.IsItem <TNavItem>() .Configure(configureAction); return(builder); }
public static IApiItemBuilder <TNavItem> IsItem <TItem, TNavItem>(this IApiFieldBuilder <TItem, TNavItem> builder) where TNavItem : class, new() { return(builder.IsItem <TNavItem>()); }
public static IApiFieldBuilder <TItem, TCollection> IsCollection <TItem, TCollection, TNavItem>(this IApiFieldBuilder <TItem, TCollection> builder, [NotNull] Action <IApiItemBuilder <TNavItem> > configureAction) where TCollection : class, IEnumerable <TNavItem> where TNavItem : class, new() { builder.IsCollection <TCollection, TNavItem>() .Configure(configureAction); return(builder); }
public static IApiFieldBuilder <TItem, IEnumerable <TNavItem> > IsCollection <TItem, TNavItem>(this IApiFieldBuilder <TItem, IEnumerable <TNavItem> > builder, [NotNull] Action <IApiItemBuilder <TNavItem> > configureAction) where TNavItem : class, new() { return(builder.IsCollection <TItem, IEnumerable <TNavItem>, TNavItem>(configureAction)); }
public static IApiItemBuilder <TNavItem> IsCollection <TItem, TNavItem>(this IApiFieldBuilder <TItem, IEnumerable <TNavItem> > builder) where TNavItem : class, new() { return(builder.IsCollection <IEnumerable <TNavItem>, TNavItem>()); }