use std::io;
use std::sync::{Arc, Mutex};
use crate::render::MetaContext;
#[derive(Clone)]
pub(crate) struct SharedBuf(Arc<Mutex<Vec<u8>>>);
impl SharedBuf {
pub(crate) fn new() -> Self {
Self(Arc::new(Mutex::new(Vec::new())))
}
pub(crate) fn string(&self) -> String {
String::from_utf8(self.0.lock().unwrap().clone()).unwrap()
}
}
impl io::Write for SharedBuf {
fn write(&mut self, buf: &[u8]) -> io::Result<usize> {
self.0.lock().unwrap().extend_from_slice(buf);
Ok(buf.len())
}
fn flush(&mut self) -> io::Result<()> {
Ok(())
}
}
pub(crate) fn make_meta(auth_state: &str, server: &str) -> MetaContext {
MetaContext {
server_label: server.to_string(),
auth_state: auth_state.to_string(),
filter_warning: None,
}
}