diff --git a/src/exec/Cargo.toml b/src/exec/Cargo.toml index 4a4892f..0d4fc33 100644 --- a/src/exec/Cargo.toml +++ b/src/exec/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "xresloader-dump-bin" -version = "2.1.2" +version = "2.1.3" authors = ["owent "] license = "MIT" description = "A tool to dump human readable text from binary output of xresloader" diff --git a/src/exec/src/main.rs b/src/exec/src/main.rs index 8b918d1..34b9c5e 100644 --- a/src/exec/src/main.rs +++ b/src/exec/src/main.rs @@ -51,26 +51,77 @@ struct DumpOptions { plain: bool, } +struct Logger { + stdout: Box, + stderr: Box, +} + +impl Logger { + pub fn new(max_log_level: log::LevelFilter) -> Self { + Self { + stdout: Box::new( + env_logger::Builder::new() + .filter_level(max_log_level) + .format_level(false) + .format_module_path(false) + .format_target(false) + .format_timestamp(None) + .target(env_logger::Target::Stdout) + .parse_default_env() + .build(), + ), + stderr: Box::new( + env_logger::Builder::new() + .filter_level(log::LevelFilter::Warn) + .format_level(false) + .format_module_path(false) + .format_target(false) + .format_timestamp(None) + .target(env_logger::Target::Stderr) + .parse_default_env() + .build(), + ), + } + } + + pub fn init(self) -> Result<(), log::SetLoggerError> { + let max_level = self.stdout.filter(); + let r = log::set_boxed_logger(Box::new(self)); + + if r.is_ok() { + log::set_max_level(max_level); + } + + r + } +} + +impl log::Log for Logger { + fn enabled(&self, metadata: &log::Metadata) -> bool { + self.stdout.enabled(metadata) || self.stderr.enabled(metadata) + } + + fn log(&self, record: &log::Record) { + if self.stderr.enabled(record.metadata()) { + self.stderr.log(record); + } else if self.stdout.enabled(record.metadata()) { + self.stdout.log(record); + } + } + + fn flush(&self) { + self.stdout.flush(); + self.stderr.flush(); + } +} + fn main() { let args = DumpOptions::parse(); if args.debug { - env_logger::Builder::new() - .filter_level(log::LevelFilter::Debug) - .format_level(true) - .format_module_path(false) - .format_target(false) - .parse_default_env() - .init(); + let _ = Logger::new(log::LevelFilter::Debug).init(); } else { - env_logger::Builder::new() - .filter_level(log::LevelFilter::Info) - .format_level(false) - .format_module_path(false) - .format_target(false) - .format_timestamp(None) - .parse_default_env() - .init(); + let _ = Logger::new(log::LevelFilter::Info).init(); } let mut desc_index = FileDescriptorIndex::new(); @@ -152,7 +203,7 @@ fn main() { info!("data count: {}", data_blocks.header.count); info!("hash code: {}", data_blocks.header.hash_code); info!("description: {}", data_blocks.header.description); - if data_blocks.header.data_source.len() > 0 { + if !data_blocks.header.data_source.is_empty() { info!("data source:"); } for data_source in &data_blocks.header.data_source { diff --git a/src/protocol/Cargo.toml b/src/protocol/Cargo.toml index 2a0dcea..ea0f815 100644 --- a/src/protocol/Cargo.toml +++ b/src/protocol/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "xresloader-protocol" -version = "2.1.2" +version = "2.1.3" authors = ["owent "] license = "MIT" description = "A tool to dump human readable text from binary output of xresloader" diff --git a/src/protocol/build.rs b/src/protocol/build.rs index 2fe4dd9..7a15d64 100644 --- a/src/protocol/build.rs +++ b/src/protocol/build.rs @@ -11,7 +11,7 @@ fn codegen() -> protobuf_codegen::Codegen { codegen .protoc_path(&protoc_bin_vendored::protoc_bin_path().unwrap()) .out_dir("src/proto") - .inputs(&[ + .inputs([ "../../third_party/xresloader-protocol/core/pb_header_v3.proto", "../../third_party/xresloader-protocol/core/extensions/v3/xresloader.proto", "../../third_party/xresloader-protocol/core/extensions/v3/xresloader_ue.proto",