// Copy creates a copy of an error. func Copy(ie interface{}) error { if ie == nil { return nil } switch e := ie.(type) { case *Error: return e.Copy() case error: val := reflect.ValueOf(e) if types.AnySettableValue(val) { return types.Copy(val).Interface().(error) } return errors.New(e.Error()) default: panic("type not supported") } }
//Copy create a new copy of e. func (e *Error) Copy() error { if e == nil { return nil } args := types.Copy(reflect.ValueOf(e.args)).Interface().([]interface{}) n := e.next.Copy() var next *Error if n != nil { next = n.(*Error) } return &Error{ err: e.err, args: args, pkg: e.pkg, file: e.file, line: e.line, debugInfo: e.debugInfo, next: next, } }