28 lines
602 B
Go
28 lines
602 B
Go
package delivery
|
|
|
|
import "net/http"
|
|
|
|
type outcome string
|
|
|
|
const (
|
|
outcomeDelivered outcome = "delivered"
|
|
outcomeRetry outcome = "retry"
|
|
outcomeFailed outcome = "failed"
|
|
)
|
|
|
|
func classify(statusCode int, reqErr error) outcome {
|
|
if reqErr != nil {
|
|
return outcomeRetry
|
|
}
|
|
if statusCode >= http.StatusOK && statusCode < http.StatusMultipleChoices {
|
|
return outcomeDelivered
|
|
}
|
|
if statusCode == http.StatusTooManyRequests || statusCode == http.StatusRequestTimeout {
|
|
return outcomeRetry
|
|
}
|
|
if statusCode >= http.StatusInternalServerError {
|
|
return outcomeRetry
|
|
}
|
|
return outcomeFailed
|
|
}
|