func (b *StringColumnType) ToString(v interface{}) string {
	return fmt.Sprintf("\"%s\"", v.(string))
}
ToString produces a string representation of a value of a StringColumnType value
package sif
import (
	"fmt"
	"strings"
	"time"
)
type ColumnType interface {
	Size() int                      
	ToString(v interface{}) string  
}
type CustomColumnType interface {
	ColumnType
	Serialize(v interface{}) ([]byte, error)  
	Deserialize([]byte) (interface{}, error)  
}
type ByteColumnType struct{}
func (b *ByteColumnType) Size() int {
	return 1
}
func (b *ByteColumnType) ToString(v interface{}) string {
	return fmt.Sprintf("%x", v.(byte))
}
type BytesColumnType struct {
	Length int
}
func (b *BytesColumnType) Size() int {
	return b.Length
}
func (b *BytesColumnType) ToString(v interface{}) string {
	var res strings.Builder
	fmt.Fprint(&res, "[")
	i := 0
	for _, v := range v.([]byte) {
		if i > 5 {
			fmt.Fprintf(&res, "... %d more", b.Length-5)
			break
		}
		fmt.Fprintf(&res, "%x", v)
		i++
	}
	fmt.Fprint(&res, "]")
	return res.String()
}
type BoolColumnType struct{}
func (b *BoolColumnType) Size() int {
	return 1
}
func (b *BoolColumnType) ToString(v interface{}) string {
	return fmt.Sprintf("%t", v.(bool))
}
type Uint8ColumnType struct{}
func (b *Uint8ColumnType) Size() int {
	return 1
}
func (b *Uint8ColumnType) ToString(v interface{}) string {
	return fmt.Sprintf("%d", v.(uint8))
}
type Uint16ColumnType struct{}
func (b *Uint16ColumnType) Size() int {
	return 2
}
func (b *Uint16ColumnType) ToString(v interface{}) string {
	return fmt.Sprintf("%d", v.(uint16))
}
type Uint32ColumnType struct{}
func (b *Uint32ColumnType) Size() int {
	return 4
}
func (b *Uint32ColumnType) ToString(v interface{}) string {
	return fmt.Sprintf("%d", v.(uint32))
}
type Uint64ColumnType struct{}
func (b *Uint64ColumnType) Size() int {
	return 8
}
func (b *Uint64ColumnType) ToString(v interface{}) string {
	return fmt.Sprintf("%d", v.(uint64))
}
type Int8ColumnType struct{}
func (b *Int8ColumnType) Size() int {
	return 1
}
func (b *Int8ColumnType) ToString(v interface{}) string {
	return fmt.Sprintf("%d", v.(int8))
}
type Int16ColumnType struct{}
func (b *Int16ColumnType) Size() int {
	return 2
}
func (b *Int16ColumnType) ToString(v interface{}) string {
	return fmt.Sprintf("%d", v.(int16))
}
type Int32ColumnType struct{}
func (b *Int32ColumnType) Size() int {
	return 4
}
func (b *Int32ColumnType) ToString(v interface{}) string {
	return fmt.Sprintf("%d", v.(int32))
}
type Int64ColumnType struct{}
func (b *Int64ColumnType) Size() int {
	return 8
}
func (b *Int64ColumnType) ToString(v interface{}) string {
	return fmt.Sprintf("%d", v.(int64))
}
type Float32ColumnType struct{}
func (b *Float32ColumnType) Size() int {
	return 4
}
func (b *Float32ColumnType) ToString(v interface{}) string {
	return fmt.Sprintf("%f", v.(float32))
}
type Float64ColumnType struct{}
func (b *Float64ColumnType) Size() int {
	return 8
}
func (b *Float64ColumnType) ToString(v interface{}) string {
	return fmt.Sprintf("%f", v.(float64))
}
type TimeColumnType struct {
	Format string
}
func (b *TimeColumnType) Size() int {
	return 15
}
func (b *TimeColumnType) ToString(v interface{}) string {
	return fmt.Sprintf("\"%s\"", v.(time.Time).String())
}
type StringColumnType struct {
	Length int
}
func (b *StringColumnType) Size() int {
	return b.Length
}