mirror of
https://github.com/Xevion/Pac-Man.git
synced 2025-12-14 16:12:25 -06:00
chore: move BufferedWriter into tracing_buffer.rs
This commit is contained in:
@@ -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<Mutex<Vec<u8>>>,
|
|
||||||
}
|
|
||||||
|
|
||||||
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<W: Write>(&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<usize> {
|
|
||||||
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()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,7 +1,5 @@
|
|||||||
//! Platform abstraction layer for cross-platform functionality.
|
//! Platform abstraction layer for cross-platform functionality.
|
||||||
|
|
||||||
#[cfg(not(target_os = "emscripten"))]
|
|
||||||
pub mod buffered_writer;
|
|
||||||
#[cfg(not(target_os = "emscripten"))]
|
#[cfg(not(target_os = "emscripten"))]
|
||||||
mod desktop;
|
mod desktop;
|
||||||
#[cfg(not(target_os = "emscripten"))]
|
#[cfg(not(target_os = "emscripten"))]
|
||||||
|
|||||||
@@ -1,15 +1,66 @@
|
|||||||
#![allow(dead_code)]
|
#![allow(dead_code)]
|
||||||
|
|
||||||
//! Buffered tracing setup for handling logs before console attachment.
|
//! Buffered tracing setup for handling logs before console attachment.
|
||||||
|
|
||||||
use crate::formatter::CustomFormatter;
|
use crate::formatter::CustomFormatter;
|
||||||
use crate::platform::buffered_writer::BufferedWriter;
|
use parking_lot::Mutex;
|
||||||
use std::io;
|
use std::io;
|
||||||
|
use std::io::Write;
|
||||||
|
use std::sync::Arc;
|
||||||
use tracing::{debug, Level};
|
use tracing::{debug, Level};
|
||||||
use tracing_error::ErrorLayer;
|
use tracing_error::ErrorLayer;
|
||||||
use tracing_subscriber::fmt::MakeWriter;
|
use tracing_subscriber::fmt::MakeWriter;
|
||||||
use tracing_subscriber::layer::SubscriberExt;
|
use tracing_subscriber::layer::SubscriberExt;
|
||||||
|
|
||||||
|
/// A thread-safe buffered writer that stores logs in memory until flushed.
|
||||||
|
#[derive(Clone)]
|
||||||
|
pub struct BufferedWriter {
|
||||||
|
buffer: Arc<Mutex<Vec<u8>>>,
|
||||||
|
}
|
||||||
|
|
||||||
|
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<W: Write>(&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<usize> {
|
||||||
|
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.
|
/// A writer that can switch between buffering and direct output.
|
||||||
#[derive(Clone, Default)]
|
#[derive(Clone, Default)]
|
||||||
pub struct SwitchableWriter {
|
pub struct SwitchableWriter {
|
||||||
|
|||||||
Reference in New Issue
Block a user