aboutsummaryrefslogtreecommitdiffstats
path: root/swarm/storage/mru/error.go
diff options
context:
space:
mode:
Diffstat (limited to 'swarm/storage/mru/error.go')
-rw-r--r--swarm/storage/mru/error.go41
1 files changed, 41 insertions, 0 deletions
diff --git a/swarm/storage/mru/error.go b/swarm/storage/mru/error.go
index bf33e6540..18ab52558 100644
--- a/swarm/storage/mru/error.go
+++ b/swarm/storage/mru/error.go
@@ -16,6 +16,10 @@
package mru
+import (
+ "fmt"
+)
+
const (
ErrInit = iota
ErrNotFound
@@ -30,3 +34,40 @@ const (
ErrPeriodDepth
ErrCnt
)
+
+// Error is a the typed error object used for Mutable Resources
+type Error struct {
+ code int
+ err string
+}
+
+// Error implements the error interface
+func (e *Error) Error() string {
+ return e.err
+}
+
+// Code returns the error code
+// Error codes are enumerated in the error.go file within the mru package
+func (e *Error) Code() int {
+ return e.code
+}
+
+// NewError creates a new Mutable Resource Error object with the specified code and custom error message
+func NewError(code int, s string) error {
+ if code < 0 || code >= ErrCnt {
+ panic("no such error code!")
+ }
+ r := &Error{
+ err: s,
+ }
+ switch code {
+ case ErrNotFound, ErrIO, ErrUnauthorized, ErrInvalidValue, ErrDataOverflow, ErrNothingToReturn, ErrInvalidSignature, ErrNotSynced, ErrPeriodDepth, ErrCorruptData:
+ r.code = code
+ }
+ return r
+}
+
+// NewErrorf is a convenience version of NewError that incorporates printf-style formatting
+func NewErrorf(code int, format string, args ...interface{}) error {
+ return NewError(code, fmt.Sprintf(format, args...))
+}