github.com/minio/mc@v0.0.0-20240507152021-646712d5e5fb/pkg/probe/wrapper.go (about) 1 // Copyright (c) 2015-2021 MinIO, Inc. 2 // 3 // This file is part of MinIO Object Storage stack 4 // 5 // This program is free software: you can redistribute it and/or modify 6 // it under the terms of the GNU Affero General Public License as published by 7 // the Free Software Foundation, either version 3 of the License, or 8 // (at your option) any later version. 9 // 10 // This program is distributed in the hope that it will be useful 11 // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 // GNU Affero General Public License for more details. 14 // 15 // You should have received a copy of the GNU Affero General Public License 16 // along with this program. If not, see <http://www.gnu.org/licenses/>. 17 18 // Package probe implements a simple mechanism to trace and return errors in large programs. 19 package probe 20 21 // wrappedError implements a container for *probe.Error. 22 type wrappedError struct { 23 err *Error 24 } 25 26 // WrapError function wraps a *probe.Error into a 'error' compatible duck type. 27 func WrapError(err *Error) error { 28 return &wrappedError{err: err} 29 } 30 31 // UnwrapError tries to convert generic 'error' into typed *probe.Error and returns true, false otherwise. 32 func UnwrapError(err error) (*Error, bool) { 33 switch e := err.(type) { 34 case *wrappedError: 35 return e.err, true 36 default: 37 return nil, false 38 } 39 } 40 41 // Error interface method. 42 func (w *wrappedError) Error() string { 43 return w.err.String() 44 }