use rocksdb::DBCompressionType;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq)]
#[non_exhaustive]
pub struct DBOptions {
pub max_open_files: Option<i32>,
pub create_if_missing: bool,
pub compression_type: CompressionType,
pub max_total_wal_size: Option<u64>,
pub max_cache_size: Option<usize>,
}
impl DBOptions {
pub fn new(
max_open_files: Option<i32>,
create_if_missing: bool,
compression_type: CompressionType,
max_total_wal_size: Option<u64>,
max_cache_size: Option<usize>,
) -> Self {
Self {
max_open_files,
create_if_missing,
compression_type,
max_total_wal_size,
max_cache_size,
}
}
}
#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq)]
#[serde(rename_all = "lowercase")]
pub enum CompressionType {
Bz2,
Lz4,
Lz4hc,
Snappy,
Zlib,
Zstd,
None,
}
impl From<CompressionType> for DBCompressionType {
fn from(compression_type: CompressionType) -> Self {
match compression_type {
CompressionType::Bz2 => Self::Bz2,
CompressionType::Lz4 => Self::Lz4,
CompressionType::Lz4hc => Self::Lz4hc,
CompressionType::Snappy => Self::Snappy,
CompressionType::Zlib => Self::Zlib,
CompressionType::Zstd => Self::Zstd,
CompressionType::None => Self::None,
}
}
}
impl Default for DBOptions {
fn default() -> Self {
Self::new(None, true, CompressionType::None, None, None)
}
}