github.com/code-to-go/safepool.lib@v0.0.0-20221205180519-ee25e63c226e/transport/utils.go (about) 1 package transport 2 3 import ( 4 "bytes" 5 "encoding/json" 6 "hash" 7 "io" 8 ) 9 10 func ReadFile(e Exchanger, name string) ([]byte, error) { 11 var b bytes.Buffer 12 err := e.Read(name, nil, &b) 13 return b.Bytes(), err 14 } 15 16 func WriteFile(e Exchanger, name string, data []byte) error { 17 b := bytes.NewBuffer(data) 18 return e.Write(name, b) 19 } 20 21 func ReadJSON(e Exchanger, name string, v any, hash hash.Hash) error { 22 data, err := ReadFile(e, name) 23 if err == nil { 24 if hash != nil { 25 hash.Write(data) 26 } 27 28 err = json.Unmarshal(data, v) 29 } 30 return err 31 } 32 33 func WriteJSON(e Exchanger, name string, v any, hash hash.Hash) error { 34 b, err := json.Marshal(v) 35 if err == nil { 36 if hash != nil { 37 hash.Write(b) 38 } 39 err = e.Write(name, bytes.NewBuffer(b)) 40 } 41 return err 42 } 43 44 func CopyFile(dest Exchanger, destName string, source Exchanger, sourceName string) error { 45 pr, pw := io.Pipe() 46 defer pr.Close() 47 var err error 48 go func() { 49 err = source.Read(sourceName, nil, pw) 50 pw.Close() 51 }() 52 53 err2 := dest.Write(destName, pr) 54 if err != nil { 55 return err 56 } else { 57 return err2 58 } 59 60 }