summaryrefslogtreecommitdiff
path: root/spartan/request.go
diff options
context:
space:
mode:
Diffstat (limited to 'spartan/request.go')
-rw-r--r--spartan/request.go21
1 files changed, 21 insertions, 0 deletions
diff --git a/spartan/request.go b/spartan/request.go
index a9b2815..c056af0 100644
--- a/spartan/request.go
+++ b/spartan/request.go
@@ -2,6 +2,7 @@ package spartan
import (
"bufio"
+ "bytes"
"errors"
"io"
"net/url"
@@ -80,3 +81,23 @@ func GetRequestBody(request *sr.Request) io.Reader {
}
return nil
}
+
+// SetRequestBody adds an io.Reader as a request body.
+//
+// It is for use in clients, preparing the request to be sent.
+//
+// This function will read the entire contents into memory unless
+// the reader is already an *io.LimitedReader.
+func SetRequestBody(request *sr.Request, body io.Reader) error {
+ if rdr, ok := body.(*io.LimitedReader); ok {
+ request.Meta = rdr
+ return nil
+ }
+
+ buf, err := io.ReadAll(body)
+ if err != nil {
+ return err
+ }
+ request.Meta = io.LimitReader(bytes.NewBuffer(buf), int64(len(buf)))
+ return nil
+}