fn new_for_writer()

in src/output.rs [87:118]


    fn new_for_writer<F, W>(acquire_writer: F) -> anyhow::Result<Self>
    where
        F: Fn() -> W + Send + 'static,
        W: Write,
    {
        let (sender, receiver) = bounded::<Vec<u8>>(1);
        let (error_sender, errors) = unbounded::<io::Error>();

        let handle = std::thread::Builder::new()
            .name("superconsole-io".to_owned())
            .spawn(move || {
                for frame in receiver.into_iter() {
                    let mut writer = acquire_writer();

                    match writer.write_all(&frame).and_then(|()| writer.flush()) {
                        Ok(()) => {}
                        Err(e) => {
                            // This can only fail if the sender disconnected, in which case they'll
                            // stop sending us data momentarily, so ignore the failure.
                            let _ignored = error_sender.try_send(e);
                        }
                    }
                }
            })
            .context("Error spawning Superconsole I/O thread")?;

        Ok(Self {
            sender,
            errors,
            handle,
        })
    }