/ cli / src / helpers / log_writer.rs
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  }