Skip to content
Snippets Groups Projects
encoder.go 461 B
package marshal

type Field interface {
	Get(obj interface{}) interface{}
	Marshal(obj interface{}, data []byte) []byte
}

type encoder struct {
	fields []Field
}

func Schema(fields ...Field) *encoder {
	return &encoder{
		fields: fields,
	}
}

func (encoder *encoder) Marshal(obj interface{}) []byte {
	result := make([]byte, 0)

	for _, field := range encoder.fields {
		result = append(result, field.Marshal(field.Get(obj), result)...)
	}

	return result
}