diff --git a/internal/util/errors.go b/internal/util/errors.go new file mode 100644 index 0000000..379b981 --- /dev/null +++ b/internal/util/errors.go @@ -0,0 +1,56 @@ +// Copyright 2019 Sorint.lab +// +// 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 util + +import ( + "strings" +) + +type Errors struct { + Errs []error +} + +func (e *Errors) IsErr() bool { + return len(e.Errs) > 0 +} + +func (e *Errors) Append(err error) { + e.Errs = append(e.Errs, err) +} + +func (e *Errors) Error() string { + errs := []string{} + for _, err := range e.Errs { + errs = append(errs, err.Error()) + } + return strings.Join(errs, ", ") +} + +func (e *Errors) Equal(e2 error) bool { + errs1 := []string{} + errs2 := []string{} + for _, err := range e.Errs { + errs1 = append(errs1, err.Error()) + } + if es2, ok := e2.(*Errors); ok { + for _, err := range es2.Errs { + errs2 = append(errs2, err.Error()) + } + } else { + errs2 = append(errs2, e2.Error()) + } + + return CompareStringSliceNoOrder(errs1, errs2) +}