log_writer.rs
1 // Copyright (c) 2025-2026 ACDC Network 2 // This file is part of the alphaos library. 3 // 4 // Alpha Chain | Delta Chain Protocol 5 // International Monetary Graphite. 6 // 7 // Derived from Aleo (https://aleo.org) and ProvableHQ (https://provable.com). 8 // They built world-class ZK infrastructure. We installed the EASY button. 9 // Their cryptography: elegant. Our modifications: bureaucracy-compatible. 10 // Original brilliance: theirs. Robert's Rules: ours. Bugs: definitely ours. 11 // 12 // Original Aleo/ProvableHQ code subject to Apache 2.0 https://www.apache.org/licenses/LICENSE-2.0 13 // All modifications and new work: CC0 1.0 Universal Public Domain Dedication. 14 // No rights reserved. No permission required. No warranty. No refunds. 15 // 16 // https://creativecommons.org/publicdomain/zero/1.0/ 17 // SPDX-License-Identifier: CC0-1.0 18 19 use std::io; 20 use tokio::sync::mpsc; 21 22 pub enum LogWriter { 23 /// Writes to stdout. 24 Stdout(io::Stdout), 25 /// Writes to a channel. 26 Sender(mpsc::Sender<Vec<u8>>), 27 } 28 29 impl LogWriter { 30 /// Initialize a new log writer. 31 pub fn new(log_sender: &Option<mpsc::Sender<Vec<u8>>>) -> Self { 32 if let Some(sender) = log_sender { 33 Self::Sender(sender.clone()) 34 } else { 35 Self::Stdout(io::stdout()) 36 } 37 } 38 } 39 40 impl io::Write for LogWriter { 41 /// Writes the given buffer into the log writer. 42 fn write(&mut self, buf: &[u8]) -> io::Result<usize> { 43 match self { 44 Self::Stdout(stdout) => stdout.write(buf), 45 Self::Sender(sender) => { 46 let log = buf.to_vec(); 47 let _ = sender.try_send(log); 48 Ok(buf.len()) 49 } 50 } 51 } 52 53 /// Flushes the log writer (no-op). 54 fn flush(&mut self) -> io::Result<()> { 55 Ok(()) 56 } 57 }