github.com/chrislusf/greenpack@v3.7.1-0.20170911073826-ad5bd10b7c47+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  }