package contract import ( "errors" "fmt" ) // ErrDeliveryChannelDown — канал, которым отвечают отправителю, не поднят. // Отдаётся отправителем-заглушкой, которого получает ядро, когда вход не // настроен. // // Значение сентинельное, а не тип: соседям по ряду есть что нести — состояние, // идентификатор задачи, — а этому нечего. Заглушка не знает ни задачи, ни чата, // и запись о недоставке делает шаг, у которого задача под рукой. var ErrDeliveryChannelDown = errors.New("delivery channel is down") // ErrOwnerRequired — приём по HTTP дошёл до заведения задачи, а владельца ему не // назвали. Значение сентинельное: нести отказу нечего, а имя учётной записи в // него не кладётся никогда. var ErrOwnerRequired = errors.New("owner is required to accept a record") type JobNotFoundError struct { State string Message string } func (e *JobNotFoundError) Error() string { return fmt.Sprintf("%s - %s", e.State, e.Message) } // LostAcquisitionError — захват задачи за время работы шага достался другому. // Шаг, получивший его, завершается без записи результата и без ответа // отправителю: иначе два воркера пишут в одну задачу по очереди, а отправитель // получает два ответа на одну запись. type LostAcquisitionError struct { JobID string } func (e *LostAcquisitionError) Error() string { return fmt.Sprintf("%s: job acquisition lost", e.JobID) } type NoopJobError struct { State string } func (e *NoopJobError) Error() string { return fmt.Sprintf("%s: no op job occur", e.State) }