package errors import ( "fmt" ) var ( _ Unavailable = (*UnavailableError)(nil) _ Error = (*UnavailableError)(nil) ) type Unavailable interface { error IsUnavailable() } type UnavailableError struct { *CaosError } func ThrowUnavailable(parent error, id, message string) error { return &UnavailableError{CreateCaosError(parent, id, message)} } func ThrowUnavailablef(parent error, id, format string, a ...interface{}) error { return ThrowUnavailable(parent, id, fmt.Sprintf(format, a...)) } func (err *UnavailableError) IsUnavailable() {} func IsUnavailable(err error) bool { _, ok := err.(Unavailable) return ok }