You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
59 lines
747 B
Go
59 lines
747 B
Go
package encoder
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"io"
|
|
|
|
"github.com/BurntSushi/toml"
|
|
)
|
|
|
|
const (
|
|
JSON = iota
|
|
TOML
|
|
)
|
|
|
|
type Encoder interface {
|
|
Encode(v interface{}) error
|
|
}
|
|
|
|
type ExportEncoder struct {
|
|
encoder Encoder
|
|
w io.Writer
|
|
eType int
|
|
}
|
|
|
|
func (ee *ExportEncoder) Encode(v interface{}) error {
|
|
var err error
|
|
|
|
if ee.eType == TOML {
|
|
fmt.Fprintf(ee.w, "+++\n")
|
|
}
|
|
|
|
err = ee.encoder.Encode(v)
|
|
|
|
if ee.eType == TOML {
|
|
fmt.Fprintf(ee.w, "+++\n")
|
|
}
|
|
|
|
return err
|
|
}
|
|
|
|
func NewExportEncoder(w io.Writer, encType int) *ExportEncoder {
|
|
|
|
var enc Encoder
|
|
|
|
switch encType {
|
|
case JSON:
|
|
enc = json.NewEncoder(w)
|
|
case TOML:
|
|
enc = toml.NewEncoder(w)
|
|
}
|
|
|
|
return &ExportEncoder{
|
|
encoder: enc,
|
|
w: w,
|
|
eType: encType,
|
|
}
|
|
}
|