file_port.go 757 B

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