summaryrefslogtreecommitdiff
path: root/vendor/github.com/docker/go-plugins-helpers/sdk/encoder.go
diff options
context:
space:
mode:
authorMatthew Heon <mheon@redhat.com>2020-11-16 14:32:12 -0500
committerMatthew Heon <mheon@redhat.com>2020-12-01 12:56:55 -0500
commit594ac4a14658a90ad7bc5541dab6349a0c629a5c (patch)
treed43d561d74c6331166bca6f5101b7d0fd8d8bd1d /vendor/github.com/docker/go-plugins-helpers/sdk/encoder.go
parent429d9492f85faf4c3a595b9d7b2a38743a4b8e42 (diff)
downloadpodman-594ac4a14658a90ad7bc5541dab6349a0c629a5c.tar.gz
podman-594ac4a14658a90ad7bc5541dab6349a0c629a5c.tar.bz2
podman-594ac4a14658a90ad7bc5541dab6349a0c629a5c.zip
Add API for communicating with Docker volume plugins
Docker provides extensibility through a plugin system, of which several types are available. This provides an initial library API for communicating with one type of plugins, volume plugins. Volume plugins allow for an external service to create and manage a volume on Podman's behalf. This does not integrate the plugin system into Libpod or Podman yet; that will come in subsequent pull requests. Signed-off-by: Matthew Heon <mheon@redhat.com>
Diffstat (limited to 'vendor/github.com/docker/go-plugins-helpers/sdk/encoder.go')
-rw-r--r--vendor/github.com/docker/go-plugins-helpers/sdk/encoder.go37
1 files changed, 37 insertions, 0 deletions
diff --git a/vendor/github.com/docker/go-plugins-helpers/sdk/encoder.go b/vendor/github.com/docker/go-plugins-helpers/sdk/encoder.go
new file mode 100644
index 000000000..195812a44
--- /dev/null
+++ b/vendor/github.com/docker/go-plugins-helpers/sdk/encoder.go
@@ -0,0 +1,37 @@
+package sdk
+
+import (
+ "encoding/json"
+ "fmt"
+ "io"
+ "net/http"
+)
+
+// DefaultContentTypeV1_1 is the default content type accepted and sent by the plugins.
+const DefaultContentTypeV1_1 = "application/vnd.docker.plugins.v1.1+json"
+
+// DecodeRequest decodes an http request into a given structure.
+func DecodeRequest(w http.ResponseWriter, r *http.Request, req interface{}) (err error) {
+ if err = json.NewDecoder(r.Body).Decode(req); err != nil {
+ http.Error(w, err.Error(), http.StatusBadRequest)
+ }
+ return
+}
+
+// EncodeResponse encodes the given structure into an http response.
+func EncodeResponse(w http.ResponseWriter, res interface{}, err bool) {
+ w.Header().Set("Content-Type", DefaultContentTypeV1_1)
+ if err {
+ w.WriteHeader(http.StatusInternalServerError)
+ }
+ json.NewEncoder(w).Encode(res)
+}
+
+// StreamResponse streams a response object to the client
+func StreamResponse(w http.ResponseWriter, data io.ReadCloser) {
+ w.Header().Set("Content-Type", DefaultContentTypeV1_1)
+ if _, err := copyBuf(w, data); err != nil {
+ fmt.Printf("ERROR in stream: %v\n", err)
+ }
+ data.Close()
+}