use std::time::Duration;
use pyo3::prelude::*;
#[pyclass(eq, eq_int, frozen, hash, from_py_object, module = "ruopus", name = "Mode")]
#[derive(Clone, Copy, PartialEq, Eq, Hash)]
pub enum Mode {
SilkOnly,
Hybrid,
CeltOnly,
}
impl From<crate::packet::Mode> for Mode {
fn from(m: crate::packet::Mode) -> Self {
match m {
crate::packet::Mode::SilkOnly => Mode::SilkOnly,
crate::packet::Mode::Hybrid => Mode::Hybrid,
crate::packet::Mode::CeltOnly => Mode::CeltOnly,
}
}
}
impl From<Mode> for crate::packet::Mode {
fn from(m: Mode) -> Self {
match m {
Mode::SilkOnly => crate::packet::Mode::SilkOnly,
Mode::Hybrid => crate::packet::Mode::Hybrid,
Mode::CeltOnly => crate::packet::Mode::CeltOnly,
}
}
}
#[pyclass(eq, eq_int, frozen, hash, ord, from_py_object, module = "ruopus", name = "Bandwidth")]
#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub enum Bandwidth {
NarrowBand,
MediumBand,
WideBand,
SuperWideBand,
FullBand,
}
#[pymethods]
impl Bandwidth {
#[getter]
fn sample_rate_hz(&self) -> u32 {
crate::packet::Bandwidth::from(*self).sample_rate_hz()
}
#[getter]
fn audio_bandwidth_hz(&self) -> u32 {
crate::packet::Bandwidth::from(*self).audio_bandwidth_hz()
}
}
impl From<crate::packet::Bandwidth> for Bandwidth {
fn from(b: crate::packet::Bandwidth) -> Self {
match b {
crate::packet::Bandwidth::NarrowBand => Bandwidth::NarrowBand,
crate::packet::Bandwidth::MediumBand => Bandwidth::MediumBand,
crate::packet::Bandwidth::WideBand => Bandwidth::WideBand,
crate::packet::Bandwidth::SuperWideBand => Bandwidth::SuperWideBand,
crate::packet::Bandwidth::FullBand => Bandwidth::FullBand,
}
}
}
impl From<Bandwidth> for crate::packet::Bandwidth {
fn from(b: Bandwidth) -> Self {
match b {
Bandwidth::NarrowBand => crate::packet::Bandwidth::NarrowBand,
Bandwidth::MediumBand => crate::packet::Bandwidth::MediumBand,
Bandwidth::WideBand => crate::packet::Bandwidth::WideBand,
Bandwidth::SuperWideBand => crate::packet::Bandwidth::SuperWideBand,
Bandwidth::FullBand => crate::packet::Bandwidth::FullBand,
}
}
}
#[pyclass(eq, eq_int, frozen, hash, from_py_object, module = "ruopus", name = "Signal")]
#[derive(Clone, Copy, PartialEq, Eq, Hash)]
pub enum Signal {
Auto,
Voice,
Music,
}
impl From<crate::encoder::Signal> for Signal {
fn from(s: crate::encoder::Signal) -> Self {
match s {
crate::encoder::Signal::Auto => Signal::Auto,
crate::encoder::Signal::Voice => Signal::Voice,
crate::encoder::Signal::Music => Signal::Music,
}
}
}
impl From<Signal> for crate::encoder::Signal {
fn from(s: Signal) -> Self {
match s {
Signal::Auto => crate::encoder::Signal::Auto,
Signal::Voice => crate::encoder::Signal::Voice,
Signal::Music => crate::encoder::Signal::Music,
}
}
}
#[pyclass(eq, eq_int, frozen, hash, from_py_object, module = "ruopus", name = "Application")]
#[derive(Clone, Copy, PartialEq, Eq, Hash)]
pub enum Application {
Voip,
Audio,
RestrictedLowDelay,
}
impl From<crate::encoder::Application> for Application {
fn from(a: crate::encoder::Application) -> Self {
match a {
crate::encoder::Application::Voip => Application::Voip,
crate::encoder::Application::Audio => Application::Audio,
crate::encoder::Application::RestrictedLowDelay => Application::RestrictedLowDelay,
}
}
}
impl From<Application> for crate::encoder::Application {
fn from(a: Application) -> Self {
match a {
Application::Voip => crate::encoder::Application::Voip,
Application::Audio => crate::encoder::Application::Audio,
Application::RestrictedLowDelay => crate::encoder::Application::RestrictedLowDelay,
}
}
}
#[pyclass(eq, eq_int, frozen, hash, ord, from_py_object, module = "ruopus", name = "FrameSize")]
#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub enum FrameSize {
Ms2_5,
Ms5,
Ms10,
Ms20,
Ms40,
Ms60,
}
#[pymethods]
impl FrameSize {
#[getter]
fn tenth_ms(&self) -> u32 {
crate::packet::FrameSize::from(*self).tenth_ms()
}
#[getter]
fn samples_per_channel_48k(&self) -> usize {
crate::packet::FrameSize::from(*self).samples_per_channel_48k()
}
#[getter]
fn duration(&self) -> Duration {
crate::packet::FrameSize::from(*self).duration()
}
}
impl From<crate::packet::FrameSize> for FrameSize {
fn from(f: crate::packet::FrameSize) -> Self {
match f {
crate::packet::FrameSize::Ms2_5 => FrameSize::Ms2_5,
crate::packet::FrameSize::Ms5 => FrameSize::Ms5,
crate::packet::FrameSize::Ms10 => FrameSize::Ms10,
crate::packet::FrameSize::Ms20 => FrameSize::Ms20,
crate::packet::FrameSize::Ms40 => FrameSize::Ms40,
crate::packet::FrameSize::Ms60 => FrameSize::Ms60,
}
}
}
impl From<FrameSize> for crate::packet::FrameSize {
fn from(f: FrameSize) -> Self {
match f {
FrameSize::Ms2_5 => crate::packet::FrameSize::Ms2_5,
FrameSize::Ms5 => crate::packet::FrameSize::Ms5,
FrameSize::Ms10 => crate::packet::FrameSize::Ms10,
FrameSize::Ms20 => crate::packet::FrameSize::Ms20,
FrameSize::Ms40 => crate::packet::FrameSize::Ms40,
FrameSize::Ms60 => crate::packet::FrameSize::Ms60,
}
}
}