#![deny(clippy::wildcard_enum_match_arm)]
use common::{LeafError, internal_todo};
use object_store::Error as ObjectStoreError;
use surrealdb_types::Error as TypesError;
use crate::buc::BucketOperation;
#[derive(Debug, thiserror::Error)]
pub(crate) enum Error {
#[error("You don't have permission to {op} this file in the `{name}` bucket")]
BucketPermissions {
name: String,
op: BucketOperation,
},
#[error("Object Store error: {0}")]
#[expect(
clippy::enum_variant_names,
reason = "the variant name is the label the wire snapshot pins this row under"
)]
ObsError(#[from] ObjectStoreError),
#[error("File access denied: {0}")]
#[cfg_attr(target_family = "wasm", allow(dead_code))]
FileAccessDenied(String),
#[error("No global bucket has been configured")]
NoGlobalBucket,
#[error("Bucket `{0}` is unavailable")]
BucketUnavailable(String),
#[error("Bucket is unavailable")]
GlobalBucketEnforced,
#[error("Bucket url could not be processed: {0}")]
#[cfg_attr(target_family = "wasm", expect(dead_code))]
InvalidBucketUrl(String),
#[error("Bucket backend is not supported")]
UnsupportedBackend,
#[error("Write operation is not supported, as bucket `{0}` is in read-only mode")]
ReadonlyBucket(String),
#[error("Operation for bucket `{0}` failed: {1}")]
ObjectStoreFailure(String, String),
}
impl LeafError for Error {
fn map_kind(self, message: String) -> TypesError {
match self {
Error::ObsError(_) => TypesError::internal(message),
Error::BucketPermissions {
..
}
| Error::FileAccessDenied(_)
| Error::NoGlobalBucket
| Error::BucketUnavailable(_)
| Error::GlobalBucketEnforced
| Error::InvalidBucketUrl(_)
| Error::UnsupportedBackend
| Error::ReadonlyBucket(_)
| Error::ObjectStoreFailure(..) => internal_todo(message),
}
}
}