GoDoxy/internal/idlewatcher/errors.go

65 lines
1.3 KiB
Go

package idlewatcher
import (
"context"
"errors"
"fmt"
)
type watcherError struct {
watcher *Watcher
err error
}
func (e *watcherError) Unwrap() error {
return e.err
}
func (e *watcherError) Error() string {
return fmt.Sprintf("watcher %q error: %s", e.watcher.cfg.ContainerName(), e.err.Error())
}
func (w *Watcher) newWatcherError(err error) error {
if errors.Is(err, causeReload) {
return nil
}
if wErr, ok := err.(*watcherError); ok { //nolint:errorlint
return wErr
}
return &watcherError{watcher: w, err: convertError(err)}
}
type depError struct {
action string
dep *dependency
err error
}
func (e *depError) Unwrap() error {
return e.err
}
func (e *depError) Error() string {
return fmt.Sprintf("%s failed for dependency %q: %s", e.action, e.dep.cfg.ContainerName(), e.err.Error())
}
func (w *Watcher) newDepError(action string, dep *dependency, err error) error {
if errors.Is(err, causeReload) {
return nil
}
if dErr, ok := err.(*depError); ok { //nolint:errorlint
return dErr
}
return w.newWatcherError(&depError{action: action, dep: dep, err: convertError(err)})
}
func convertError(err error) error {
switch {
case err == nil:
return nil
case errors.Is(err, context.DeadlineExceeded):
return errors.New("timeout")
default:
return err
}
}