use cassandra_protocol::compression::Compression;
use cassandra_protocol::frame::frame_decoder::{
FrameDecoder, LegacyFrameDecoder, Lz4FrameDecoder, UncompressedFrameDecoder,
};
use cassandra_protocol::frame::frame_encoder::{
FrameEncoder, LegacyFrameEncoder, Lz4FrameEncoder, UncompressedFrameEncoder,
};
use cassandra_protocol::frame::Version;
pub trait FrameEncodingFactory {
fn create_encoder(
&self,
version: Version,
compression: Compression,
) -> Box<dyn FrameEncoder + Send + Sync>;
fn create_decoder(
&self,
version: Version,
compression: Compression,
) -> Box<dyn FrameDecoder + Send + Sync>;
}
#[derive(Copy, Clone, Debug, Default, Ord, PartialOrd, Eq, PartialEq, Hash)]
pub struct ProtocolFrameEncodingFactory;
impl FrameEncodingFactory for ProtocolFrameEncodingFactory {
fn create_encoder(
&self,
version: Version,
compression: Compression,
) -> Box<dyn FrameEncoder + Send + Sync> {
if version >= Version::V5 {
match compression {
Compression::Lz4 => Box::<Lz4FrameEncoder>::default(),
_ => Box::<UncompressedFrameEncoder>::default(),
}
} else {
Box::<LegacyFrameEncoder>::default()
}
}
fn create_decoder(
&self,
version: Version,
compression: Compression,
) -> Box<dyn FrameDecoder + Send + Sync> {
if version >= Version::V5 {
match compression {
Compression::Lz4 => Box::<Lz4FrameDecoder>::default(),
_ => Box::<UncompressedFrameDecoder>::default(),
}
} else {
Box::<LegacyFrameDecoder>::default()
}
}
}