use crate::config::*;
use serde::{Deserialize, Serialize};
use std::{fmt::format, sync::Arc};
use strum::EnumMessage;
use strum_macros;
use super::{StreamMetaData, StreamStatus};
#[cfg(feature = "cpal-api")]
pub mod api_cpal;
#[cfg(feature = "pulse-api")]
pub mod api_pulse;
pub trait Stream {
fn metadata(&self) -> Arc<StreamMetaData>;
fn ninchannels(&self) -> usize;
fn noutchannels(&self) -> usize;
fn status(&self) -> StreamStatus;
}
#[cfg_attr(feature = "python-bindings", pyclass(eq, eq_int))]
#[derive(
strum_macros::EnumMessage,
Debug,
Clone,
PartialEq,
Serialize,
Deserialize,
strum_macros::Display,
)]
#[allow(dead_code)]
pub enum StreamApiDescr {
#[strum(message = "Cpal", detailed_message = "Cross-Platform Audio Library")]
Cpal = 0,
#[strum(message = "pulse", detailed_message = "Pulseaudio")]
Pulse = 1,
}
#[cfg(feature = "python-bindings")]
impl StreamApiDescr {
fn __str__(&self) -> String {
format!("{}", self.get_detailed_message().unwrap())
}
}