use shardline_index::{
FileRecordInvariantError, LocalIndexStoreError, MemoryIndexStoreError, MemoryRecordStoreError,
PostgresMetadataStoreError, QuarantineCandidateError, RetentionHoldError, WebhookDeliveryError,
};
use shardline_server_core::{InvalidLifecycleMetadataError, InvalidReconstructionResponseError};
use thiserror::Error;
#[derive(Debug, Error)]
pub enum IndexError {
#[error("index adapter operation failed")]
Local(#[from] LocalIndexStoreError),
#[error("memory index adapter operation failed")]
MemoryIndex(#[from] MemoryIndexStoreError),
#[error("memory record adapter operation failed")]
MemoryRecord(#[from] MemoryRecordStoreError),
#[error("postgres metadata adapter operation failed")]
PostgresMetadata(#[from] PostgresMetadataStoreError),
#[error("retention hold input was invalid")]
RetentionHold(#[from] RetentionHoldError),
#[error("quarantine candidate input was invalid")]
QuarantineCandidate(#[from] QuarantineCandidateError),
#[error("webhook delivery metadata was invalid")]
WebhookDelivery(#[from] WebhookDeliveryError),
#[error("stored file metadata was invalid")]
FileRecordInvariant(#[from] FileRecordInvariantError),
#[error("lifecycle metadata was internally inconsistent")]
InvalidLifecycleMetadata(#[from] InvalidLifecycleMetadataError),
#[error("reconstruction response invariant failed: {0}")]
InvalidReconstructionResponse(#[from] InvalidReconstructionResponseError),
#[error("required metadata table is missing: {0}")]
MissingRequiredMetadataTable(String),
#[error("repository rename target already contains conflicting metadata")]
ConflictingRenameTargetRecord,
}