44 lines
1.3 KiB
Go
44 lines
1.3 KiB
Go
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
|
|
}
|