use thiserror::Error;
commonware_macros::stability_mod!(ALPHA, pub mod authenticated);
pub mod contiguous;
pub mod segmented;
#[cfg(all(test, feature = "arbitrary"))]
mod conformance;
#[derive(Debug, Error)]
pub enum Error {
#[error("merkle error: {0}")]
Merkle(anyhow::Error),
#[error("journal error: {0}")]
Journal(anyhow::Error),
#[error("runtime error: {0}")]
Runtime(#[from] commonware_runtime::Error),
#[error("codec error: {0}")]
Codec(#[from] commonware_codec::Error),
#[error("metadata error: {0}")]
Metadata(#[from] crate::metadata::Error),
#[error("invalid blob name: {0}")]
InvalidBlobName(String),
#[error("invalid blob size: index={0} size={1}")]
InvalidBlobSize(u64, u64),
#[error("item too large: size={0}")]
ItemTooLarge(usize),
#[error("already pruned to section: {0}")]
AlreadyPrunedToSection(u64),
#[error("section out of range: {0}")]
SectionOutOfRange(u64),
#[error("usize too small")]
UsizeTooSmall,
#[error("offset overflow")]
OffsetOverflow,
#[error("unexpected size: expected={0} actual={1}")]
UnexpectedSize(u32, u32),
#[error("missing blob: {0}")]
MissingBlob(u64),
#[error("item out of range: {0}")]
ItemOutOfRange(u64),
#[error("item pruned: {0}")]
ItemPruned(u64),
#[error("invalid rewind: {0}")]
InvalidRewind(u64),
#[error("compression failed")]
CompressionFailed,
#[error("decompression failed")]
DecompressionFailed,
#[error("value too large (> u32::MAX)")]
ValueTooLarge,
#[error("corruption detected: {0}")]
Corruption(String),
#[error("invalid configuration: {0}")]
InvalidConfiguration(String),
#[error("checksum mismatch: expected={0}, found={1}")]
ChecksumMismatch(u32, u32),
#[error("empty append")]
EmptyAppend,
}