use duroxide::providers::ProviderError;
pub fn map_cosmosdb_error(operation: &str, status: u16, message: &str) -> ProviderError {
match status {
409 => ProviderError::retryable(operation, format!("CosmosDB conflict (409): {message}")),
429 => {
ProviderError::retryable(operation, format!("CosmosDB rate limited (429): {message}"))
}
408 => ProviderError::retryable(
operation,
format!("CosmosDB request timeout (408): {message}"),
),
412 => ProviderError::retryable(
operation,
format!("CosmosDB precondition failed (412): {message}"),
),
503 => ProviderError::retryable(
operation,
format!("CosmosDB service unavailable (503): {message}"),
),
404 => ProviderError::permanent(operation, format!("CosmosDB not found (404): {message}")),
400 => {
ProviderError::permanent(operation, format!("CosmosDB bad request (400): {message}"))
}
413 => ProviderError::permanent(
operation,
format!("CosmosDB request too large (413): {message}"),
),
s if s >= 500 => {
ProviderError::retryable(operation, format!("CosmosDB server error ({s}): {message}"))
}
s => ProviderError::permanent(operation, format!("CosmosDB client error ({s}): {message}")),
}
}
pub fn is_conflict(status: u16) -> bool {
status == 409
}
pub fn is_not_found(status: u16) -> bool {
status == 404
}
pub fn is_precondition_failed(status: u16) -> bool {
status == 412
}