package runtime import ( "errors" "fmt" ) // ErrNotFound reports that a runtime record was requested but does not // exist in the store. var ErrNotFound = errors.New("runtime record not found") // ErrConflict reports that a runtime mutation could not be applied // because the record changed concurrently or failed a compare-and-swap // guard. var ErrConflict = errors.New("runtime record conflict") // ErrInvalidTransition is the sentinel returned when Transition rejects // a `(from, to)` pair. var ErrInvalidTransition = errors.New("invalid runtime status transition") // InvalidTransitionError stores the rejected `(from, to)` pair and wraps // ErrInvalidTransition so callers can match it with errors.Is. type InvalidTransitionError struct { // From stores the source status that was attempted to leave. From Status // To stores the destination status that was attempted to enter. To Status } // Error reports a human-readable summary of the rejected pair. func (err *InvalidTransitionError) Error() string { return fmt.Sprintf( "invalid runtime status transition from %q to %q", err.From, err.To, ) } // Unwrap returns ErrInvalidTransition so errors.Is recognizes the // sentinel. func (err *InvalidTransitionError) Unwrap() error { return ErrInvalidTransition }