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  }