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
}