summaryrefslogtreecommitdiffstats
path: root/vendor/github.com/wiggin77/merror
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/wiggin77/merror')
-rw-r--r--vendor/github.com/wiggin77/merror/.gitignore12
-rw-r--r--vendor/github.com/wiggin77/merror/LICENSE21
-rw-r--r--vendor/github.com/wiggin77/merror/README.md2
-rw-r--r--vendor/github.com/wiggin77/merror/format.go43
-rw-r--r--vendor/github.com/wiggin77/merror/go.mod1
-rw-r--r--vendor/github.com/wiggin77/merror/merror.go87
6 files changed, 166 insertions, 0 deletions
diff --git a/vendor/github.com/wiggin77/merror/.gitignore b/vendor/github.com/wiggin77/merror/.gitignore
new file mode 100644
index 00000000..f1c181ec
--- /dev/null
+++ b/vendor/github.com/wiggin77/merror/.gitignore
@@ -0,0 +1,12 @@
+# Binaries for programs and plugins
+*.exe
+*.exe~
+*.dll
+*.so
+*.dylib
+
+# Test binary, build with `go test -c`
+*.test
+
+# Output of the go coverage tool, specifically when used with LiteIDE
+*.out
diff --git a/vendor/github.com/wiggin77/merror/LICENSE b/vendor/github.com/wiggin77/merror/LICENSE
new file mode 100644
index 00000000..2b0bf7ef
--- /dev/null
+++ b/vendor/github.com/wiggin77/merror/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2018 wiggin77
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/vendor/github.com/wiggin77/merror/README.md b/vendor/github.com/wiggin77/merror/README.md
new file mode 100644
index 00000000..8a31687f
--- /dev/null
+++ b/vendor/github.com/wiggin77/merror/README.md
@@ -0,0 +1,2 @@
+# merror
+Multiple Error aggregator for Golang.
diff --git a/vendor/github.com/wiggin77/merror/format.go b/vendor/github.com/wiggin77/merror/format.go
new file mode 100644
index 00000000..8ba9aa82
--- /dev/null
+++ b/vendor/github.com/wiggin77/merror/format.go
@@ -0,0 +1,43 @@
+package merror
+
+import (
+ "fmt"
+ "strings"
+)
+
+// FormatterFunc is a function that converts a merror
+// to a string.
+type FormatterFunc func(merr *MError) string
+
+// GlobalFormatter is the global merror formatter.
+// Set this to a custom formatter if desired.
+var GlobalFormatter = defaultFormatter
+
+// defaultFormatter
+func defaultFormatter(merr *MError) string {
+ count := 0
+ overflow := 0
+
+ var format func(sb *strings.Builder, merr *MError, indent string)
+ format = func(sb *strings.Builder, merr *MError, indent string) {
+ count += merr.Len()
+ overflow += merr.Overflow()
+
+ fmt.Fprintf(sb, "%sMError:\n", indent)
+ for _, err := range merr.Errors() {
+ if e, ok := err.(*MError); ok {
+ format(sb, e, indent+" ")
+ } else {
+ fmt.Fprintf(sb, "%s%s\n", indent, err.Error())
+ }
+ }
+ }
+
+ sb := &strings.Builder{}
+ format(sb, merr, "")
+ fmt.Fprintf(sb, "%d errors total.\n", count)
+ if merr.overflow > 0 {
+ fmt.Fprintf(sb, "%d errors truncated.\n", overflow)
+ }
+ return sb.String()
+}
diff --git a/vendor/github.com/wiggin77/merror/go.mod b/vendor/github.com/wiggin77/merror/go.mod
new file mode 100644
index 00000000..44982f78
--- /dev/null
+++ b/vendor/github.com/wiggin77/merror/go.mod
@@ -0,0 +1 @@
+module github.com/wiggin77/merror
diff --git a/vendor/github.com/wiggin77/merror/merror.go b/vendor/github.com/wiggin77/merror/merror.go
new file mode 100644
index 00000000..01f19913
--- /dev/null
+++ b/vendor/github.com/wiggin77/merror/merror.go
@@ -0,0 +1,87 @@
+package merror
+
+// MError represents zero or more errors that can be
+// accumulated via the `Append` method.
+type MError struct {
+ cap int
+ errors []error
+ overflow int
+ formatter FormatterFunc
+}
+
+// New returns a new instance of `MError` with no limit on the
+// number of errors that can be appended.
+func New() *MError {
+ me := &MError{}
+ me.errors = make([]error, 0, 10)
+ return me
+}
+
+// NewWithCap returns a new instance of `MError` with a maximum
+// capacity of `cap` errors. If exceeded only the overflow counter
+// will be incremented.
+//
+// A `cap` of zero of less means no cap and max size of a slice
+// on the current platform is the upper bound.
+func NewWithCap(cap int) *MError {
+ me := New()
+ me.cap = cap
+ return me
+}
+
+// Append adds an error to the aggregated error list.
+func (me *MError) Append(err error) {
+ if err == nil {
+ return
+ }
+ if me.cap > 0 && len(me.errors) >= me.cap {
+ me.overflow++
+ } else {
+ me.errors = append(me.errors, err)
+ }
+}
+
+// Errors returns an array of the `error` instances that have been
+// appended to this `MError`.
+func (me *MError) Errors() []error {
+ return me.errors
+}
+
+// Len returns the number of errors that have been appended.
+func (me *MError) Len() int {
+ return len(me.errors)
+}
+
+// Overflow returns the number of errors that have been truncated
+// because maximum capacity was exceeded.
+func (me *MError) Overflow() int {
+ return me.overflow
+}
+
+// SetFormatter sets the `FormatterFunc` to be used when `Error` is
+// called. The previous `FormatterFunc` is returned.
+func (me *MError) SetFormatter(f FormatterFunc) (old FormatterFunc) {
+ old = me.formatter
+ me.formatter = f
+ return
+}
+
+// ErrorOrNil returns nil if this `MError` contains no errors,
+// otherwise this `MError` is returned.
+func (me *MError) ErrorOrNil() error {
+ if me == nil || len(me.errors) == 0 {
+ return nil
+ }
+ return me
+}
+
+// Error returns a string representation of this MError.
+// The output format depends on the `Formatter` set for this
+// merror instance, or the global formatter if none set.
+func (me *MError) Error() string {
+ f := me.formatter
+ if f == nil {
+ f = GlobalFormatter
+ }
+ return f(me)
+}