示例#1
0
        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);
        }
示例#2
0
        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);
        }
示例#3
0
        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);
        }
示例#4
0
        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);
        }
示例#5
0
 public static IApiItemBuilder <TNavItem> IsItem <TItem, TNavItem>(this IApiFieldBuilder <TItem, TNavItem> builder)
     where TNavItem : class, new()
 {
     return(builder.IsItem <TNavItem>());
 }
示例#6
0
        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);
        }
示例#7
0
 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));
 }
示例#8
0
 public static IApiItemBuilder <TNavItem> IsCollection <TItem, TNavItem>(this IApiFieldBuilder <TItem, IEnumerable <TNavItem> > builder)
     where TNavItem : class, new()
 {
     return(builder.IsCollection <IEnumerable <TNavItem>, TNavItem>());
 }