package invite import ( "errors" "fmt" ) // ErrNotFound reports that an invite record was requested but does not // exist in the store. var ErrNotFound = errors.New("invite not found") // ErrConflict reports that an invite mutation could not be applied because // the record changed concurrently or failed a compare-and-swap guard. var ErrConflict = errors.New("invite conflict") // ErrInvalidTransition is the sentinel returned when Transition rejects a // `(from, to)` pair. var ErrInvalidTransition = errors.New("invalid invite 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 invite 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 }