github.com/lheiskan/zebrapack@v4.1.1-0.20181107023619-e955d028f9bf+incompatible/msgp/file_port.go (about) 1 // +build windows appengine 2 3 package msgp 4 5 import ( 6 "io/ioutil" 7 "os" 8 ) 9 10 // MarshalSizer is the combination 11 // of the Marshaler and Sizer 12 // interfaces. 13 type MarshalSizer interface { 14 Marshaler 15 Sizer 16 } 17 18 func ReadFile(dst Unmarshaler, file *os.File) error { 19 if u, ok := dst.(Decodable); ok { 20 return u.DecodeMsg(NewReader(file)) 21 } 22 23 data, err := ioutil.ReadAll(file) 24 if err != nil { 25 return err 26 } 27 _, err = dst.UnmarshalMsg(data) 28 return err 29 } 30 31 func WriteFile(src MarshalSizer, file *os.File) error { 32 if e, ok := src.(Encodable); ok { 33 w := NewWriter(file) 34 err := e.EncodeMsg(w) 35 if err == nil { 36 err = w.Flush() 37 } 38 return err 39 } 40 41 raw, err := src.MarshalMsg(nil) 42 if err != nil { 43 return err 44 } 45 _, err = file.Write(raw) 46 return err 47 }