package resource import ( "fmt" "strings" ) type NotFoundError struct { LastError error LastRequest interface{} LastResponse interface{} Message string Retries int } func (e *NotFoundError) Error() string { if e.Message != "" { return e.Message } return "couldn't find resource" } // UnexpectedStateError is returned when Refresh returns a state that's neither in Target nor Pending type UnexpectedStateError struct { LastError error State string ExpectedState []string } func (e *UnexpectedStateError) Error() string { return fmt.Sprintf( "unexpected state '%s', wanted target '%s'. last error: %s", e.State, strings.Join(e.ExpectedState, ", "), e.LastError, ) } // TimeoutError is returned when WaitForState times out type TimeoutError struct { LastError error LastState string ExpectedState []string } func (e *TimeoutError) Error() string { expectedState := "resource to be gone" if len(e.ExpectedState) > 0 { expectedState = fmt.Sprintf("state to become '%s'", strings.Join(e.ExpectedState, ", ")) } lastState := "" if e.LastState != "" { lastState = fmt.Sprintf(" (last state: '%s')", e.LastState) } if e.LastError != nil { return fmt.Sprintf("timeout while waiting for %s%s: %s", expectedState, lastState, e.LastError) } return fmt.Sprintf("timeout while waiting for %s%s", expectedState, lastState) }