func (b *TodoJSONBuilder) Properties() []*TodoPropertyInfo {
	return []*TodoPropertyInfo{
		b.ID,
		b.Text,
		b.Done,
		b.CreatedAt,
	}
}
Properties returns all properties on TodoJSONBuilder.
package main
import (
	"encoding/json"
	"time"
)
type TodoJSON struct {
	ID        int64     `json:"id,omitempty,string"`
	Text      string    `json:"text,omitempty"`
	Done      bool      `json:"done,omitempty"`
	CreatedAt time.Time `json:"createdAt,omitempty"`
}
type TodoJSONList []*TodoJSON
type TodoPropertyEncoder func(src *Todo, dest *TodoJSON) error
type TodoPropertyDecoder func(src *TodoJSON, dest *Todo) error
type TodoPropertyInfo struct {
	fieldName string
	jsonName  string
	Encoder   TodoPropertyEncoder
	Decoder   TodoPropertyDecoder
}
func (info *TodoPropertyInfo) FieldName() string {
	return info.fieldName
}
func (info *TodoPropertyInfo) JSONName() string {
	return info.jsonName
}
type TodoJSONBuilder struct {
	_properties        map[string]*TodoPropertyInfo
	_jsonPropertyMap   map[string]*TodoPropertyInfo
	_structPropertyMap map[string]*TodoPropertyInfo
	ID                 *TodoPropertyInfo
	Text               *TodoPropertyInfo
	Done               *TodoPropertyInfo
	CreatedAt          *TodoPropertyInfo
}
func NewTodoJSONBuilder() *TodoJSONBuilder {
	jb := &TodoJSONBuilder{
		_properties:        map[string]*TodoPropertyInfo{},
		_jsonPropertyMap:   map[string]*TodoPropertyInfo{},
		_structPropertyMap: map[string]*TodoPropertyInfo{},
		ID: &TodoPropertyInfo{
			fieldName: "ID",
			jsonName:  "id",
			Encoder: func(src *Todo, dest *TodoJSON) error {
				if src == nil {
					return nil
				}
				dest.ID = src.ID
				return nil
			},
			Decoder: func(src *TodoJSON, dest *Todo) error {
				if src == nil {
					return nil
				}
				dest.ID = src.ID
				return nil
			},
		},
		Text: &TodoPropertyInfo{
			fieldName: "Text",
			jsonName:  "text",
			Encoder: func(src *Todo, dest *TodoJSON) error {
				if src == nil {
					return nil
				}
				dest.Text = src.Text
				return nil
			},
			Decoder: func(src *TodoJSON, dest *Todo) error {
				if src == nil {
					return nil
				}
				dest.Text = src.Text
				return nil
			},
		},
		Done: &TodoPropertyInfo{
			fieldName: "Done",
			jsonName:  "done",
			Encoder: func(src *Todo, dest *TodoJSON) error {
				if src == nil {
					return nil
				}
				dest.Done = src.Done
				return nil
			},
			Decoder: func(src *TodoJSON, dest *Todo) error {
				if src == nil {
					return nil
				}
				dest.Done = src.Done
				return nil
			},
		},
		CreatedAt: &TodoPropertyInfo{
			fieldName: "CreatedAt",
			jsonName:  "createdAt",
			Encoder: func(src *Todo, dest *TodoJSON) error {
				if src == nil {
					return nil
				}
				dest.CreatedAt = src.CreatedAt
				return nil
			},
			Decoder: func(src *TodoJSON, dest *Todo) error {
				if src == nil {
					return nil
				}
				dest.CreatedAt = src.CreatedAt
				return nil
			},
		},
	}
	jb._structPropertyMap["ID"] = jb.ID
	jb._jsonPropertyMap["id"] = jb.ID
	jb._structPropertyMap["Text"] = jb.Text
	jb._jsonPropertyMap["text"] = jb.Text
	jb._structPropertyMap["Done"] = jb.Done
	jb._jsonPropertyMap["done"] = jb.Done
	jb._structPropertyMap["CreatedAt"] = jb.CreatedAt
	jb._jsonPropertyMap["createdAt"] = jb.CreatedAt
	return jb
}