use std::io;
use spacetimedb_sats::buffer::DecodeError;
use thiserror::Error;
use crate::segment;
#[derive(Debug, Error)]
pub enum Traversal {
#[error("out-of-order commit: expected-offset={expected_offset} actual-offset={actual_offset}")]
OutOfOrder {
expected_offset: u64,
actual_offset: u64,
#[source]
prev_error: Option<Box<Self>>,
},
#[error("failed to decode tx record at offset={offset}")]
Decode {
offset: u64,
#[source]
source: DecodeError,
},
#[error("checksum mismatch at offset={offset}")]
Checksum {
offset: u64,
#[source]
source: ChecksumMismatch,
},
#[error(transparent)]
Io(#[from] io::Error),
}
#[derive(Debug, Error)]
#[error("failed to commit during append")]
pub struct Append<T> {
pub txdata: T,
#[source]
pub source: io::Error,
}
#[derive(Debug, Error)]
#[error("checksum mismatch")]
pub struct ChecksumMismatch;
#[derive(Debug, Error)]
pub(crate) enum SegmentMetadata {
#[error("invalid commit encountered")]
InvalidCommit {
sofar: segment::Metadata,
#[source]
source: io::Error,
},
#[error(transparent)]
Io(#[from] io::Error),
}