public IEncoderDescriptor <TElement> HasElements <TElement>(Func <TEntity, IEnumerable <TElement> > getter)
        {
            var elementDefinition = this.definition.Create <TElement>();
            var elementDescriptor =
                new TreeEncoderDescriptor <TState, TNative, TElement>(this.converter, elementDefinition);

            return(TreeEncoderDescriptor <TState, TNative, TEntity> .BindArray(this.definition, getter, elementDescriptor));
        }
        public IEncoderDescriptor <TElement> HasElements <TElement>(Func <TEntity, IEnumerable <TElement> > getter,
                                                                    IEncoderDescriptor <TElement> descriptor)
        {
            if (!(descriptor is TreeEncoderDescriptor <TState, TNative, TElement> ancestor))
            {
                throw new ArgumentOutOfRangeException(nameof(descriptor), "incompatible descriptor type");
            }

            return(TreeEncoderDescriptor <TState, TNative, TEntity> .BindArray(this.definition, getter, ancestor));
        }