diff --git a/src/platform/buffered_writer.rs b/src/platform/buffered_writer.rs deleted file mode 100644 index 988c078..0000000 --- a/src/platform/buffered_writer.rs +++ /dev/null @@ -1,57 +0,0 @@ -#![allow(dead_code)] - -//! Buffered writer for tracing logs that can store logs before console attachment. - -use parking_lot::Mutex; -use std::io::{self, Write}; -use std::sync::Arc; - -/// A thread-safe buffered writer that stores logs in memory until flushed. -#[derive(Clone)] -pub struct BufferedWriter { - buffer: Arc>>, -} - -impl BufferedWriter { - /// Creates a new buffered writer. - pub fn new() -> Self { - Self { - buffer: Arc::new(Mutex::new(Vec::new())), - } - } - - /// Flushes all buffered content to the provided writer and clears the buffer. - pub fn flush_to(&self, mut writer: W) -> io::Result<()> { - let mut buffer = self.buffer.lock(); - if !buffer.is_empty() { - writer.write_all(&buffer)?; - writer.flush()?; - buffer.clear(); - } - Ok(()) - } - - /// Returns the current buffer size in bytes. - pub fn buffer_size(&self) -> usize { - self.buffer.lock().len() - } -} - -impl Write for BufferedWriter { - fn write(&mut self, buf: &[u8]) -> io::Result { - let mut buffer = self.buffer.lock(); - buffer.extend_from_slice(buf); - Ok(buf.len()) - } - - fn flush(&mut self) -> io::Result<()> { - // For buffered writer, flush is a no-op since we're storing in memory - Ok(()) - } -} - -impl Default for BufferedWriter { - fn default() -> Self { - Self::new() - } -} diff --git a/src/platform/mod.rs b/src/platform/mod.rs index d0fff45..e623797 100644 --- a/src/platform/mod.rs +++ b/src/platform/mod.rs @@ -1,7 +1,5 @@ //! Platform abstraction layer for cross-platform functionality. -#[cfg(not(target_os = "emscripten"))] -pub mod buffered_writer; #[cfg(not(target_os = "emscripten"))] mod desktop; #[cfg(not(target_os = "emscripten"))] diff --git a/src/platform/tracing_buffer.rs b/src/platform/tracing_buffer.rs index dc7b760..649625f 100644 --- a/src/platform/tracing_buffer.rs +++ b/src/platform/tracing_buffer.rs @@ -1,15 +1,66 @@ #![allow(dead_code)] - //! Buffered tracing setup for handling logs before console attachment. use crate::formatter::CustomFormatter; -use crate::platform::buffered_writer::BufferedWriter; +use parking_lot::Mutex; use std::io; +use std::io::Write; +use std::sync::Arc; use tracing::{debug, Level}; use tracing_error::ErrorLayer; use tracing_subscriber::fmt::MakeWriter; use tracing_subscriber::layer::SubscriberExt; +/// A thread-safe buffered writer that stores logs in memory until flushed. +#[derive(Clone)] +pub struct BufferedWriter { + buffer: Arc>>, +} + +impl BufferedWriter { + /// Creates a new buffered writer. + pub fn new() -> Self { + Self { + buffer: Arc::new(Mutex::new(Vec::new())), + } + } + + /// Flushes all buffered content to the provided writer and clears the buffer. + pub fn flush_to(&self, mut writer: W) -> io::Result<()> { + let mut buffer = self.buffer.lock(); + if !buffer.is_empty() { + writer.write_all(&buffer)?; + writer.flush()?; + buffer.clear(); + } + Ok(()) + } + + /// Returns the current buffer size in bytes. + pub fn buffer_size(&self) -> usize { + self.buffer.lock().len() + } +} + +impl Write for BufferedWriter { + fn write(&mut self, buf: &[u8]) -> io::Result { + let mut buffer = self.buffer.lock(); + buffer.extend_from_slice(buf); + Ok(buf.len()) + } + + fn flush(&mut self) -> io::Result<()> { + // For buffered writer, flush is a no-op since we're storing in memory + Ok(()) + } +} + +impl Default for BufferedWriter { + fn default() -> Self { + Self::new() + } +} + /// A writer that can switch between buffering and direct output. #[derive(Clone, Default)] pub struct SwitchableWriter {