ColumnWriterDetails GetStructColumnWriter()
        {
            var columnWriter = new StructWriter(_bufferFactory, 0);
            var state        = new List <object>();

            var structColumnType = new Protocol.ColumnType
            {
                Kind = Protocol.ColumnTypeKind.Struct
            };

            foreach (var column in _columnWriters)
            {
                structColumnType.FieldNames.Add(column.PropertyName);
                structColumnType.SubTypes.Add(column.ColumnWriter.ColumnId);
            }

            return(new ColumnWriterDetails
            {
                PropertyName = _typeName,
                ColumnWriter = columnWriter,
                AddValueToState = classInstance =>
                {
                    state.Add(classInstance);
                },
                WriteValuesFromState = () =>
                {
                    columnWriter.AddBlock(state);
                    state.Clear();
                },
                ColumnType = structColumnType
            });
        }