liuxiaolong
2022-06-28 37714b1093c04061e636e5b1d27179652e671c0a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
package multierror
 
import (
    "fmt"
 
    "github.com/hashicorp/errwrap"
)
 
// Prefix is a helper function that will prefix some text
// to the given error. If the error is a multierror.Error, then
// it will be prefixed to each wrapped error.
//
// This is useful to use when appending multiple multierrors
// together in order to give better scoping.
func Prefix(err error, prefix string) error {
    if err == nil {
        return nil
    }
 
    format := fmt.Sprintf("%s {{err}}", prefix)
    switch err := err.(type) {
    case *Error:
        // Typed nils can reach here, so initialize if we are nil
        if err == nil {
            err = new(Error)
        }
 
        // Wrap each of the errors
        for i, e := range err.Errors {
            err.Errors[i] = errwrap.Wrapf(format, e)
        }
 
        return err
    default:
        return errwrap.Wrapf(format, err)
    }
}