From 51b12870dd46f2444e58c74efcc2e98f06542f7e Mon Sep 17 00:00:00 2001 From: fluo10 Date: Sat, 7 Jun 2025 09:21:07 +0900 Subject: [PATCH] Implement console writer --- lazy-supplements/Cargo.toml | 1 + .../src/cli/{console.rs => console/mod.rs} | 19 ++++++++++-- lazy-supplements/src/cli/console/writer.rs | 31 +++++++++++++++++++ lazy-supplements/src/config/node.rs | 3 -- 4 files changed, 49 insertions(+), 5 deletions(-) rename lazy-supplements/src/cli/{console.rs => console/mod.rs} (79%) create mode 100644 lazy-supplements/src/cli/console/writer.rs diff --git a/lazy-supplements/Cargo.toml b/lazy-supplements/Cargo.toml index be91ed6..5729b22 100644 --- a/lazy-supplements/Cargo.toml +++ b/lazy-supplements/Cargo.toml @@ -27,6 +27,7 @@ tempfile = { version = "3.20.0", optional = true } thiserror = "2.0.12" tokio = { version = "1.45.0", features = ["macros", "rt"] } toml = "0.8.22" +tracing = "0.1.41" tracing-subscriber = { version = "0.3.19", features = ["env-filter"] } uuid = { version = "1.17.0", features = ["v4"] } diff --git a/lazy-supplements/src/cli/console.rs b/lazy-supplements/src/cli/console/mod.rs similarity index 79% rename from lazy-supplements/src/cli/console.rs rename to lazy-supplements/src/cli/console/mod.rs index 34c7e7f..147af7b 100644 --- a/lazy-supplements/src/cli/console.rs +++ b/lazy-supplements/src/cli/console/mod.rs @@ -1,10 +1,14 @@ +mod writer; + use std::{collections::HashMap, ffi::OsString, hash::Hash, time::Duration}; use clap::{Args, Parser}; use futures::{future::BoxFuture, StreamExt}; -use libp2p::{noise, ping, swarm::{NetworkBehaviour, SwarmEvent}, tcp, yamux, Swarm}; -use tokio::time::sleep; +use libp2p::{core::transport::dummy::DummyTransport, noise, ping, swarm::{NetworkBehaviour, SwarmEvent}, tcp, yamux, Swarm}; +use rustyline::ExternalPrinter; +use tokio::{sync::Mutex, time::sleep}; use tracing_subscriber::EnvFilter; +use writer::ConsoleWriter; use crate::{error::Error, global::GLOBAL}; @@ -78,6 +82,17 @@ impl ConsoleArgs { GLOBAL.launch_swarm().await }); let mut rl = rustyline::DefaultEditor::new()?; + let mut printer = rl.create_external_printer()?; + tracing_subscriber::fmt() + .with_env_filter(EnvFilter::from_default_env()) + .with_writer(std::sync::Mutex::new(ConsoleWriter::try_from(&mut rl)?) + ).init(); + tokio::spawn(async move { + loop{ + tracing::event!(tracing::Level::ERROR, "test"); + tokio::time::sleep(Duration::from_secs(1)).await; + } + }); loop { match rl.readline(">> ") { Ok(line) => { diff --git a/lazy-supplements/src/cli/console/writer.rs b/lazy-supplements/src/cli/console/writer.rs new file mode 100644 index 0000000..2502289 --- /dev/null +++ b/lazy-supplements/src/cli/console/writer.rs @@ -0,0 +1,31 @@ +use std::io::Read; + +use rustyline::{DefaultEditor, ExternalPrinter}; + +use crate::error::Error; + +pub struct ConsoleWriter { + printer: Box +} + +impl TryFrom<&mut DefaultEditor> for ConsoleWriter { + type Error = Error; + fn try_from(e: &mut DefaultEditor) -> Result { + Ok(ConsoleWriter { + printer: Box::new(e.create_external_printer()?) + }) + } + +} + +impl std::io::Write for ConsoleWriter { + fn write(&mut self, buf: &[u8]) -> std::io::Result { + let msg = String::from_utf8_lossy(buf).into_owned(); + let size = msg.as_bytes().len(); + self.printer.as_mut().print(msg); + Ok(size) + } + fn flush(&mut self) -> std::io::Result<()> { + Ok(()) + } +} \ No newline at end of file diff --git a/lazy-supplements/src/config/node.rs b/lazy-supplements/src/config/node.rs index a64592b..28ed0b6 100644 --- a/lazy-supplements/src/config/node.rs +++ b/lazy-supplements/src/config/node.rs @@ -34,9 +34,6 @@ pub struct NodeConfig { impl NodeConfig { pub async fn try_into_swarm (self) -> Result, Error> { - let _ = tracing_subscriber::fmt() - .with_env_filter(EnvFilter::from_default_env()) - .try_init(); let mut swarm = libp2p::SwarmBuilder::with_existing_identity(self.secret) .with_tokio() .with_tcp(