summaryrefslogtreecommitdiffstats
path: root/pkg/registry/error.go
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/registry/error.go')
-rw-r--r--pkg/registry/error.go79
1 files changed, 79 insertions, 0 deletions
diff --git a/pkg/registry/error.go b/pkg/registry/error.go
new file mode 100644
index 0000000..f8e126d
--- /dev/null
+++ b/pkg/registry/error.go
@@ -0,0 +1,79 @@
+// Copyright 2018 Google LLC All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package registry
+
+import (
+ "encoding/json"
+ "net/http"
+)
+
+type regError struct {
+ Status int
+ Code string
+ Message string
+}
+
+func (r *regError) Write(resp http.ResponseWriter) error {
+ resp.WriteHeader(r.Status)
+
+ type err struct {
+ Code string `json:"code"`
+ Message string `json:"message"`
+ }
+ type wrap struct {
+ Errors []err `json:"errors"`
+ }
+ return json.NewEncoder(resp).Encode(wrap{
+ Errors: []err{
+ {
+ Code: r.Code,
+ Message: r.Message,
+ },
+ },
+ })
+}
+
+// regErrInternal returns an internal server error.
+func regErrInternal(err error) *regError {
+ return &regError{
+ Status: http.StatusInternalServerError,
+ Code: "INTERNAL_SERVER_ERROR",
+ Message: err.Error(),
+ }
+}
+
+var regErrBlobUnknown = &regError{
+ Status: http.StatusNotFound,
+ Code: "BLOB_UNKNOWN",
+ Message: "Unknown blob",
+}
+
+var regErrUnsupported = &regError{
+ Status: http.StatusMethodNotAllowed,
+ Code: "UNSUPPORTED",
+ Message: "Unsupported operation",
+}
+
+var regErrDigestMismatch = &regError{
+ Status: http.StatusBadRequest,
+ Code: "DIGEST_INVALID",
+ Message: "digest does not match contents",
+}
+
+var regErrDigestInvalid = &regError{
+ Status: http.StatusBadRequest,
+ Code: "NAME_INVALID",
+ Message: "invalid digest",
+}