diff --git a/rust-sdk/src/lib.rs b/rust-sdk/src/lib.rs index 52becf3f1d..01f7e1c3c7 100644 --- a/rust-sdk/src/lib.rs +++ b/rust-sdk/src/lib.rs @@ -1,59 +1,9 @@ -use std::sync::{Arc, Mutex}; - -use tracing_subscriber::{fmt::MakeWriter, EnvFilter}; - mod error; +mod logger; mod machine; pub use error::*; +pub use logger::{set_logger, Logger}; pub use machine::{Device, DeviceLists, OlmMachine, Request, RequestType, Sas}; -pub trait Logger: Send { - fn log(&self, log_line: String); -} - -impl std::io::Write for LoggerWrapper { - fn write(&mut self, buf: &[u8]) -> std::io::Result { - let data = String::from_utf8_lossy(buf).to_string(); - self.inner.lock().unwrap().log(data); - - Ok(buf.len()) - } - - fn flush(&mut self) -> std::io::Result<()> { - Ok(()) - } -} - -impl MakeWriter for LoggerWrapper { - type Writer = LoggerWrapper; - - fn make_writer(&self) -> Self::Writer { - self.clone() - } -} - -#[derive(Clone)] -pub struct LoggerWrapper { - inner: Arc>>, -} - -pub fn set_logger(logger: Box) { - let logger = LoggerWrapper { - inner: Arc::new(Mutex::new(logger)), - }; - - let filter = EnvFilter::from_default_env().add_directive( - "matrix_sdk_crypto=trace" - .parse() - .expect("Can't parse logging filter directive"), - ); - - let _ = tracing_subscriber::fmt() - .with_writer(logger) - .with_env_filter(filter) - .without_time() - .try_init(); -} - include!(concat!(env!("OUT_DIR"), "/olm.uniffi.rs")); diff --git a/rust-sdk/src/logger.rs b/rust-sdk/src/logger.rs new file mode 100644 index 0000000000..3ddef223fd --- /dev/null +++ b/rust-sdk/src/logger.rs @@ -0,0 +1,53 @@ +use std::{ + io::{Result, Write}, + sync::{Arc, Mutex}, +}; +use tracing_subscriber::{fmt::MakeWriter, EnvFilter}; + +pub trait Logger: Send { + fn log(&self, log_line: String); +} + +impl Write for LoggerWrapper { + fn write(&mut self, buf: &[u8]) -> Result { + let data = String::from_utf8_lossy(buf).to_string(); + self.inner.lock().unwrap().log(data); + + Ok(buf.len()) + } + + fn flush(&mut self) -> Result<()> { + Ok(()) + } +} + +impl MakeWriter for LoggerWrapper { + type Writer = LoggerWrapper; + + fn make_writer(&self) -> Self::Writer { + self.clone() + } +} + +#[derive(Clone)] +pub struct LoggerWrapper { + inner: Arc>>, +} + +pub fn set_logger(logger: Box) { + let logger = LoggerWrapper { + inner: Arc::new(Mutex::new(logger)), + }; + + let filter = EnvFilter::from_default_env().add_directive( + "matrix_sdk_crypto=trace" + .parse() + .expect("Can't parse logging filter directive"), + ); + + let _ = tracing_subscriber::fmt() + .with_writer(logger) + .with_env_filter(filter) + .without_time() + .try_init(); +}