#[derive(Debug, Clone)]
pub struct PartitionConfig {
pub shard_count: u16,
pub segment_max_bytes: usize,
pub use_meta: bool,
}
impl PartitionConfig {
pub fn new(shard_count: u16, segment_max_bytes: usize, use_meta: bool) -> crate::Result<Self> {
if shard_count == 0 {
return Err(crate::error::Error::Partition(
crate::partition::PartitionError::InvalidShardCount(shard_count),
));
}
if segment_max_bytes == 0 {
return Err(crate::error::Error::Partition(
crate::partition::PartitionError::InvalidSegmentSize(segment_max_bytes),
));
}
Ok(Self {
shard_count,
segment_max_bytes,
use_meta,
})
}
pub fn default() -> Self {
Self {
shard_count: 16, segment_max_bytes: 64 * 1024, use_meta: true, }
}
}
impl Default for PartitionConfig {
fn default() -> Self {
Self::default()
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_valid_config() {
let config = PartitionConfig::new(8, 1024, true);
assert!(config.is_ok());
let config = config.unwrap();
assert_eq!(config.shard_count, 8);
assert_eq!(config.segment_max_bytes, 1024);
assert!(config.use_meta);
}
#[test]
fn test_invalid_shard_count() {
let config = PartitionConfig::new(0, 1024, true);
assert!(config.is_err());
}
#[test]
fn test_invalid_segment_size() {
let config = PartitionConfig::new(8, 0, true);
assert!(config.is_err());
}
#[test]
fn test_default_config() {
let config = PartitionConfig::default();
assert_eq!(config.shard_count, 16);
assert_eq!(config.segment_max_bytes, 64 * 1024);
assert!(config.use_meta);
}
}