/// <summary> /// Describe and create decoder for given schema using reflection on target entity and provided binding flags. /// </summary> /// <typeparam name="TEntity">Entity type</typeparam> /// <param name="schema">Entity schema</param> /// <param name="bindings">Binding flags used to filter bound fields and properties</param> /// <returns>Entity decoder</returns> public static IDecoder <TEntity> CreateDecoder <TEntity>(ISchema <TEntity> schema, BindingFlags bindings) { if (!Linker.LinkDecoder(schema.DecoderDescriptor, bindings, new Dictionary <Type, object>())) { throw new ArgumentException($"can't link decoder for type '{typeof(TEntity)}'", nameof(schema)); } return(schema.CreateDecoder(ConstructorGenerator.CreateConstructor <TEntity>())); }