twitch-hls-client 1.3.3

Minimal CLI client for watching/recording Twitch streams
use std::io::{self, Write};

use anyhow::{ensure, Result};

use super::{player::Player, recorder::Recorder};

pub struct CombinedWriter {
    player: Option<Player>,
    recorder: Option<Recorder>,
}

impl Write for CombinedWriter {
    fn write(&mut self, _buf: &[u8]) -> io::Result<usize> {
        unimplemented!()
    }

    fn flush(&mut self) -> io::Result<()> {
        if let Some(ref mut player) = self.player {
            player.flush()?;
        }

        if let Some(ref mut recorder) = self.recorder {
            recorder.flush()?;
        }

        Ok(())
    }

    fn write_all(&mut self, buf: &[u8]) -> io::Result<()> {
        if let Some(ref mut player) = self.player {
            player.write_all(buf)?;
        }

        if let Some(ref mut recorder) = self.recorder {
            recorder.write_all(buf)?;
        }

        Ok(())
    }
}

impl CombinedWriter {
    pub fn new(player: Option<Player>, recorder: Option<Recorder>) -> Result<Self> {
        ensure!(
            player.is_some() || recorder.is_some(),
            "Player or recording must be set"
        );

        Ok(Self { player, recorder })
    }
}