use std::sync::mpsc;
use anyhow::{Result, anyhow};
use crate::vad::VadStreamReceiver;
pub enum SamplesRx {
Plain(mpsc::Receiver<Vec<f32>>),
Vad(VadStreamReceiver),
}
impl SamplesRx {
pub fn recv(&mut self) -> Result<Vec<f32>> {
match self {
SamplesRx::Plain(rx) => rx
.recv()
.map_err(|_| anyhow!("decoder output channel disconnected")),
SamplesRx::Vad(rx) => rx.recv(),
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn samples_rx_plain_reports_disconnect_as_error() {
let (tx, rx) = mpsc::channel::<Vec<f32>>();
drop(tx);
let mut rx = SamplesRx::Plain(rx);
let err = rx.recv().unwrap_err();
assert!(
err.to_string()
.contains("decoder output channel disconnected")
);
}
}