use cratestack_core::{CratestackError, DbErrorInfo};
use crate::{cratestack_error_from_sqlx, sqlx};
pub(crate) fn classify_unique_violation(error: sqlx::Error) -> CratestackError {
if let sqlx::Error::Database(db_err) = &error
&& let Some(code) = db_err.code()
&& code == "23505"
{
return CratestackError::ConflictTyped(DbErrorInfo {
detail: db_err.message().to_owned(),
sqlstate: Some(code.into_owned()),
constraint: db_err.constraint().map(ToOwned::to_owned),
});
}
cratestack_error_from_sqlx(error)
}