use std::time::Duration;
use crate::error::{Error, Result};
use crate::types::LogLine;
use super::Device;
#[derive(Clone, Debug)]
pub struct LogStream(flume::Receiver<LogLine>);
impl LogStream {
pub fn recv(&self) -> Result<LogLine> {
self.0.recv().map_err(|_| Error::Disconnected)
}
pub fn try_recv(&self) -> Option<LogLine> {
self.0.try_recv().ok()
}
pub fn recv_timeout(&self, timeout: Duration) -> Option<LogLine> {
self.0.recv_timeout(timeout).ok()
}
pub fn try_iter(&self) -> impl Iterator<Item = LogLine> + '_ {
self.0.try_iter()
}
}
impl IntoIterator for LogStream {
type Item = LogLine;
type IntoIter = flume::IntoIter<LogLine>;
fn into_iter(self) -> Self::IntoIter {
self.0.into_iter()
}
}
impl Device {
pub fn logs(&self) -> LogStream {
LogStream(self.link.logs_rx())
}
}