use std::fmt;
#[derive(Debug)]
pub enum PartitionError {
InvalidShardCount(u16),
InvalidSegmentSize(usize),
MetaOperationFailed(String),
SegmentScanFailed(String),
DatabaseError(String),
EncodingError(String),
}
impl std::error::Error for PartitionError {
fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
None
}
}
impl fmt::Display for PartitionError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
PartitionError::InvalidShardCount(count) => {
write!(
f,
"Invalid shard count {}: must be between 1 and 65535",
count
)
}
PartitionError::InvalidSegmentSize(size) => {
write!(f, "Invalid segment size {}: must be greater than 0", size)
}
PartitionError::MetaOperationFailed(msg) => {
write!(f, "Meta table operation failed: {}", msg)
}
PartitionError::SegmentScanFailed(msg) => {
write!(f, "Segment scan failed: {}", msg)
}
PartitionError::DatabaseError(msg) => {
write!(f, "Database error: {}", msg)
}
PartitionError::EncodingError(ref err) => {
write!(f, "Encoding error: {}", err)
}
}
}
}
pub mod config;
pub mod scan;
pub mod shard;
pub mod table;
pub mod traits;
pub use config::PartitionConfig;
pub use scan::{enumerate_segments, find_head_segment, SegmentInfo, SegmentIterator};
pub use table::{PartitionedRead, PartitionedTable, PartitionedWrite};