git-lfs/metaencoding.go

40 lines
925 B
Go
Raw Normal View History

2013-09-27 17:08:19 +00:00
package gitmedia
import (
"bytes"
"encoding/json"
"io"
)
2013-09-27 17:08:53 +00:00
var MediaWarning = []byte("# This is a placeholder for large media, please install GitHub git-media to retrieve content\n# It is also possible you did not have the media locally, run 'git media sync' to retrieve it\n")
2013-09-27 17:08:19 +00:00
type Encoder struct {
writer io.Writer
jsonencoder *json.Encoder
}
func NewEncoder(writer io.Writer) *Encoder {
return &Encoder{writer, json.NewEncoder(writer)}
}
func (e *Encoder) Encode(obj interface{}) error {
e.writer.Write(MediaWarning)
return e.jsonencoder.Encode(obj)
}
type Decoder struct {
2013-10-02 15:08:07 +00:00
reader io.Reader
2013-09-27 17:08:19 +00:00
}
func NewDecoder(reader io.Reader) *Decoder {
2013-10-02 15:08:07 +00:00
return &Decoder{reader}
2013-09-27 17:08:19 +00:00
}
func (d *Decoder) Decode(obj interface{}) error {
2013-10-02 15:08:07 +00:00
buf := make([]byte, 1024)
io.ReadFull(d.reader, buf)
slices := bytes.Split(buf, []byte("\n"))
dec := json.NewDecoder(bytes.NewBuffer(slices[len(slices)-2]))
return dec.Decode(obj)
2013-09-27 17:08:19 +00:00
}