use opus2::Channels as OpusChannels;
#[derive(Clone, Copy, Debug, Eq, PartialEq, Hash)]
#[non_exhaustive]
pub enum DecodeMode {
Pass,
Decrypt,
Decode(DecodeConfig),
}
impl DecodeMode {
#[must_use]
pub fn should_decode(self) -> bool {
matches!(self, DecodeMode::Decode(..))
}
#[must_use]
pub fn should_decrypt(self) -> bool {
self != DecodeMode::Pass
}
}
#[non_exhaustive]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq, Hash)]
pub struct DecodeConfig {
pub channels: Channels,
pub sample_rate: SampleRate,
}
impl DecodeConfig {
#[must_use]
pub fn new(channels: Channels, sample_rate: SampleRate) -> Self {
Self {
channels,
sample_rate,
}
}
}
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq, Hash)]
#[non_exhaustive]
pub enum Channels {
Mono,
#[default]
Stereo,
}
impl Channels {
pub(crate) fn channels(self) -> usize {
match self {
Channels::Mono => 1,
Channels::Stereo => 2,
}
}
}
impl From<Channels> for OpusChannels {
fn from(value: Channels) -> Self {
match value {
Channels::Mono => OpusChannels::Mono,
Channels::Stereo => OpusChannels::Stereo,
}
}
}
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq, Hash)]
#[non_exhaustive]
pub enum SampleRate {
Hz8000,
Hz12000,
Hz16000,
Hz24000,
#[default]
Hz48000,
}
impl From<SampleRate> for u32 {
fn from(value: SampleRate) -> Self {
match value {
SampleRate::Hz8000 => 8000,
SampleRate::Hz12000 => 12000,
SampleRate::Hz16000 => 16000,
SampleRate::Hz24000 => 24000,
SampleRate::Hz48000 => 48000,
}
}
}