From 5addf14e40d81d1be39aba059fbc35215b7b22d0 Mon Sep 17 00:00:00 2001 From: bingryan Date: Sun, 31 Mar 2024 12:39:39 +0800 Subject: [PATCH 1/8] refactor: output format --- src/lib.rs | 6 +++--- src/options.rs | 4 ++-- src/subcommand.rs | 27 ++++++++++++++++++++------- tests/wallet/dump.rs | 2 +- 4 files changed, 26 insertions(+), 13 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 7feedae4b6..390fd3e12f 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -26,7 +26,7 @@ use { into_usize::IntoUsize, representation::Representation, settings::Settings, - subcommand::{Subcommand, SubcommandResult}, + subcommand::{OutputFormat, Subcommand, SubcommandResult}, tally::Tally, }, anyhow::{anyhow, bail, ensure, Context, Error}, @@ -261,7 +261,7 @@ pub fn main() { let args = Arguments::parse(); - let minify = args.options.minify; + let format = args.options.format; match args.run() { Err(err) => { @@ -283,7 +283,7 @@ pub fn main() { } Ok(output) => { if let Some(output) = output { - output.print_json(minify); + output.print(format); } gracefully_shutdown_indexer(); } diff --git a/src/options.rs b/src/options.rs index b77002d6d6..f675d4576a 100644 --- a/src/options.rs +++ b/src/options.rs @@ -63,8 +63,8 @@ pub struct Options { pub(crate) index_transactions: bool, #[arg(long, help = "Run in integration test mode.")] pub(crate) integration_test: bool, - #[arg(long, help = "Minify JSON output.")] - pub(crate) minify: bool, + #[clap(value_enum, short, long, default_value_t = OutputFormat::Minify, help = "Specify output format")] + pub(crate) format: OutputFormat, #[arg( long, short, diff --git a/src/subcommand.rs b/src/subcommand.rs index 2da87735db..2c77bba491 100644 --- a/src/subcommand.rs +++ b/src/subcommand.rs @@ -81,20 +81,33 @@ impl Subcommand { } } +#[derive(clap::ValueEnum, Debug, Clone, Copy, Serialize, Deserialize)] +pub enum OutputFormat { + Minify, + Json, + Yaml, +} + +impl Default for OutputFormat { + fn default() -> Self { + OutputFormat::Minify + } +} + pub trait Output: Send { - fn print_json(&self, minify: bool); + fn print(&self, format: OutputFormat); } impl Output for T where T: Serialize + Send, { - fn print_json(&self, minify: bool) { - if minify { - serde_json::to_writer(io::stdout(), self).ok(); - } else { - serde_json::to_writer_pretty(io::stdout(), self).ok(); - } + fn print(&self, format: OutputFormat) { + match format { + OutputFormat::Minify => serde_json::to_writer(io::stdout(), self).ok(), + OutputFormat::Json => serde_json::to_writer_pretty(io::stdout(), self).ok(), + OutputFormat::Yaml => serde_yaml::to_writer(io::stdout(), self).ok(), + }; println!(); } } diff --git a/tests/wallet/dump.rs b/tests/wallet/dump.rs index f8fdca5b68..cdae859cfd 100644 --- a/tests/wallet/dump.rs +++ b/tests/wallet/dump.rs @@ -55,7 +55,7 @@ fn dump_and_restore_descriptors_with_minify() { create_wallet(&core, &ord); - let output = CommandBuilder::new("--minify wallet dump") + let output = CommandBuilder::new("--format minify wallet dump") .core(&core) .ord(&ord) .stderr_regex(".*") From 66fd13dbfa770e3c07b3daddd8150b8d85944181 Mon Sep 17 00:00:00 2001 From: bingryan Date: Sun, 31 Mar 2024 12:56:55 +0800 Subject: [PATCH 2/8] fix --- src/subcommand.rs | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/subcommand.rs b/src/subcommand.rs index 2c77bba491..68598dfa00 100644 --- a/src/subcommand.rs +++ b/src/subcommand.rs @@ -81,18 +81,19 @@ impl Subcommand { } } -#[derive(clap::ValueEnum, Debug, Clone, Copy, Serialize, Deserialize)] +#[derive(clap::ValueEnum, Debug, Clone, Copy, Serialize, Deserialize, Default)] pub enum OutputFormat { + #[default] Minify, Json, Yaml, } -impl Default for OutputFormat { - fn default() -> Self { - OutputFormat::Minify - } -} +// impl Default for OutputFormat { +// fn default() -> Self { +// OutputFormat::Minify +// } +// } pub trait Output: Send { fn print(&self, format: OutputFormat); From 4700fe5159c9c4ea4b671781c59fdcf826704b2c Mon Sep 17 00:00:00 2001 From: bingryan Date: Sun, 31 Mar 2024 12:57:46 +0800 Subject: [PATCH 3/8] fix --- src/subcommand.rs | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/subcommand.rs b/src/subcommand.rs index 68598dfa00..ea38d1b547 100644 --- a/src/subcommand.rs +++ b/src/subcommand.rs @@ -89,12 +89,6 @@ pub enum OutputFormat { Yaml, } -// impl Default for OutputFormat { -// fn default() -> Self { -// OutputFormat::Minify -// } -// } - pub trait Output: Send { fn print(&self, format: OutputFormat); } From acdd91dee98469cf8b91b963ae31fc61758555de Mon Sep 17 00:00:00 2001 From: bingryan Date: Sun, 31 Mar 2024 13:08:46 +0800 Subject: [PATCH 4/8] fix --- tests/info.rs | 4 ++-- tests/settings.rs | 21 ++++++++++++--------- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/tests/info.rs b/tests/info.rs index 170ec5aab8..575b70c8d2 100644 --- a/tests/info.rs +++ b/tests/info.rs @@ -3,7 +3,7 @@ use {super::*, ord::subcommand::index::info::TransactionsOutput}; #[test] fn json_with_satoshi_index() { let core = mockcore::spawn(); - CommandBuilder::new("--index-sats index info") + CommandBuilder::new("--index-sats --format json index info") .core(&core) .stdout_regex( r#"\{ @@ -37,7 +37,7 @@ fn json_with_satoshi_index() { #[test] fn json_without_satoshi_index() { let core = mockcore::spawn(); - CommandBuilder::new("index info") + CommandBuilder::new("--format json index info") .core(&core) .stdout_regex( r#"\{ diff --git a/tests/settings.rs b/tests/settings.rs index bfd271d28b..eff46ee648 100644 --- a/tests/settings.rs +++ b/tests/settings.rs @@ -44,13 +44,16 @@ fn config_is_loaded_from_config_option() { fs::write(&config, "chain: regtest").unwrap(); - CommandBuilder::new(format!("--config {} settings", config.to_str().unwrap())) - .stdout_regex( - r#".* + CommandBuilder::new(format!( + "--config {} --format json settings", + config.to_str().unwrap() + )) + .stdout_regex( + r#".* "chain": "regtest", .*"#, - ) - .run_and_extract_stdout(); + ) + .run_and_extract_stdout(); } #[test] @@ -86,7 +89,7 @@ fn config_is_loaded_from_config_dir() { fs::write(tempdir.path().join("ord.yaml"), "chain: regtest").unwrap(); CommandBuilder::new(format!( - "--config-dir {} settings", + "--config-dir {} --format json settings", tempdir.path().to_str().unwrap() )) .stdout_regex( @@ -99,7 +102,7 @@ fn config_is_loaded_from_config_dir() { #[test] fn config_is_loaded_from_data_dir() { - CommandBuilder::new("settings") + CommandBuilder::new(format!("--format json settings")) .write("ord.yaml", "chain: regtest") .stdout_regex( r#".* @@ -111,7 +114,7 @@ fn config_is_loaded_from_data_dir() { #[test] fn env_is_loaded() { - CommandBuilder::new("settings") + CommandBuilder::new(format!("--format json settings")) .stdout_regex( r#".* "chain": "mainnet", @@ -119,7 +122,7 @@ fn env_is_loaded() { ) .run_and_extract_stdout(); - CommandBuilder::new("settings") + CommandBuilder::new(format!("--format json settings")) .env("ORD_CHAIN", "regtest") .stdout_regex( r#".* From a49fddf4c5bc650e93c23607c735fb0a092de1e2 Mon Sep 17 00:00:00 2001 From: bingryan Date: Sun, 31 Mar 2024 13:35:44 +0800 Subject: [PATCH 5/8] fix --- tests/settings.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/settings.rs b/tests/settings.rs index eff46ee648..41a686b863 100644 --- a/tests/settings.rs +++ b/tests/settings.rs @@ -2,7 +2,7 @@ use super::*; #[test] fn default() { - CommandBuilder::new("settings") + CommandBuilder::new("--format json settings") .integration_test(false) .stdout_regex( r#"\{ @@ -102,7 +102,7 @@ fn config_is_loaded_from_config_dir() { #[test] fn config_is_loaded_from_data_dir() { - CommandBuilder::new(format!("--format json settings")) + CommandBuilder::new("--format json settings") .write("ord.yaml", "chain: regtest") .stdout_regex( r#".* @@ -114,7 +114,7 @@ fn config_is_loaded_from_data_dir() { #[test] fn env_is_loaded() { - CommandBuilder::new(format!("--format json settings")) + CommandBuilder::new("--format json settings") .stdout_regex( r#".* "chain": "mainnet", @@ -122,7 +122,7 @@ fn env_is_loaded() { ) .run_and_extract_stdout(); - CommandBuilder::new(format!("--format json settings")) + CommandBuilder::new("--format json settings") .env("ORD_CHAIN", "regtest") .stdout_regex( r#".* From 246a8810313d82d068b7254bc13d0cf97632ac46 Mon Sep 17 00:00:00 2001 From: bingryan Date: Sun, 31 Mar 2024 13:45:57 +0800 Subject: [PATCH 6/8] use Json format as default --- src/options.rs | 2 +- src/subcommand.rs | 4 ++-- tests/info.rs | 4 ++-- tests/settings.rs | 23 ++++++++++------------- 4 files changed, 15 insertions(+), 18 deletions(-) diff --git a/src/options.rs b/src/options.rs index f675d4576a..84dccb304a 100644 --- a/src/options.rs +++ b/src/options.rs @@ -63,7 +63,7 @@ pub struct Options { pub(crate) index_transactions: bool, #[arg(long, help = "Run in integration test mode.")] pub(crate) integration_test: bool, - #[clap(value_enum, short, long, default_value_t = OutputFormat::Minify, help = "Specify output format")] + #[clap(value_enum, short, long, default_value_t = OutputFormat::Json, help = "Specify output format")] pub(crate) format: OutputFormat, #[arg( long, diff --git a/src/subcommand.rs b/src/subcommand.rs index ea38d1b547..fd90a9fd0d 100644 --- a/src/subcommand.rs +++ b/src/subcommand.rs @@ -84,9 +84,9 @@ impl Subcommand { #[derive(clap::ValueEnum, Debug, Clone, Copy, Serialize, Deserialize, Default)] pub enum OutputFormat { #[default] - Minify, Json, Yaml, + Minify, } pub trait Output: Send { @@ -99,9 +99,9 @@ where { fn print(&self, format: OutputFormat) { match format { - OutputFormat::Minify => serde_json::to_writer(io::stdout(), self).ok(), OutputFormat::Json => serde_json::to_writer_pretty(io::stdout(), self).ok(), OutputFormat::Yaml => serde_yaml::to_writer(io::stdout(), self).ok(), + OutputFormat::Minify => serde_json::to_writer(io::stdout(), self).ok(), }; println!(); } diff --git a/tests/info.rs b/tests/info.rs index 575b70c8d2..170ec5aab8 100644 --- a/tests/info.rs +++ b/tests/info.rs @@ -3,7 +3,7 @@ use {super::*, ord::subcommand::index::info::TransactionsOutput}; #[test] fn json_with_satoshi_index() { let core = mockcore::spawn(); - CommandBuilder::new("--index-sats --format json index info") + CommandBuilder::new("--index-sats index info") .core(&core) .stdout_regex( r#"\{ @@ -37,7 +37,7 @@ fn json_with_satoshi_index() { #[test] fn json_without_satoshi_index() { let core = mockcore::spawn(); - CommandBuilder::new("--format json index info") + CommandBuilder::new("index info") .core(&core) .stdout_regex( r#"\{ diff --git a/tests/settings.rs b/tests/settings.rs index 41a686b863..eedea3fbc5 100644 --- a/tests/settings.rs +++ b/tests/settings.rs @@ -2,7 +2,7 @@ use super::*; #[test] fn default() { - CommandBuilder::new("--format json settings") + CommandBuilder::new("settings") .integration_test(false) .stdout_regex( r#"\{ @@ -44,16 +44,13 @@ fn config_is_loaded_from_config_option() { fs::write(&config, "chain: regtest").unwrap(); - CommandBuilder::new(format!( - "--config {} --format json settings", - config.to_str().unwrap() - )) - .stdout_regex( - r#".* + CommandBuilder::new(format!("--config {} settings", config.to_str().unwrap())) + .stdout_regex( + r#".* "chain": "regtest", .*"#, - ) - .run_and_extract_stdout(); + ) + .run_and_extract_stdout(); } #[test] @@ -89,7 +86,7 @@ fn config_is_loaded_from_config_dir() { fs::write(tempdir.path().join("ord.yaml"), "chain: regtest").unwrap(); CommandBuilder::new(format!( - "--config-dir {} --format json settings", + "--config-dir {} settings", tempdir.path().to_str().unwrap() )) .stdout_regex( @@ -102,7 +99,7 @@ fn config_is_loaded_from_config_dir() { #[test] fn config_is_loaded_from_data_dir() { - CommandBuilder::new("--format json settings") + CommandBuilder::new("settings") .write("ord.yaml", "chain: regtest") .stdout_regex( r#".* @@ -114,7 +111,7 @@ fn config_is_loaded_from_data_dir() { #[test] fn env_is_loaded() { - CommandBuilder::new("--format json settings") + CommandBuilder::new("settings") .stdout_regex( r#".* "chain": "mainnet", @@ -122,7 +119,7 @@ fn env_is_loaded() { ) .run_and_extract_stdout(); - CommandBuilder::new("--format json settings") + CommandBuilder::new("settings") .env("ORD_CHAIN", "regtest") .stdout_regex( r#".* From 2f1d8158da5fa9698b620ac59d926f0dfd56362e Mon Sep 17 00:00:00 2001 From: bingryan Date: Sun, 31 Mar 2024 13:51:28 +0800 Subject: [PATCH 7/8] fix --- tests/settings.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/settings.rs b/tests/settings.rs index eedea3fbc5..bfd271d28b 100644 --- a/tests/settings.rs +++ b/tests/settings.rs @@ -44,7 +44,7 @@ fn config_is_loaded_from_config_option() { fs::write(&config, "chain: regtest").unwrap(); - CommandBuilder::new(format!("--config {} settings", config.to_str().unwrap())) + CommandBuilder::new(format!("--config {} settings", config.to_str().unwrap())) .stdout_regex( r#".* "chain": "regtest", From 3bd90717a950d16405a02a8f4dbb66ea3f8f8a19 Mon Sep 17 00:00:00 2001 From: raphjaph Date: Mon, 6 May 2024 12:19:36 +0200 Subject: [PATCH 8/8] simplify --- src/lib.rs | 2 +- src/options.rs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index a51f0af663..929af95c15 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -274,7 +274,7 @@ pub fn main() { } Ok(output) => { if let Some(output) = output { - output.print(format); + output.print(format.unwrap_or_default()); } gracefully_shutdown_indexer(); } diff --git a/src/options.rs b/src/options.rs index 96a3213ccf..6c3c7f2826 100644 --- a/src/options.rs +++ b/src/options.rs @@ -65,8 +65,8 @@ pub struct Options { pub(crate) index_transactions: bool, #[arg(long, help = "Run in integration test mode.")] pub(crate) integration_test: bool, - #[clap(value_enum, short, long, default_value_t = OutputFormat::Json, help = "Specify output format")] - pub(crate) format: OutputFormat, + #[clap(long, short, long, help = "Specify output format. [default: json]")] + pub(crate) format: Option, #[arg( long, short,