You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@arrow.apache.org by ji...@apache.org on 2022/02/02 08:29:22 UTC

[arrow-rs] 01/01: upgrade clap

This is an automated email from the ASF dual-hosted git repository.

jiayuliu pushed a commit to branch upgrade-clap
in repository https://gitbox.apache.org/repos/asf/arrow-rs.git

commit 0f3d315938efbcd86aba44c896470c929d620218
Author: Jiayu Liu <ji...@hey.com>
AuthorDate: Wed Feb 2 16:29:10 2022 +0800

    upgrade clap
---
 integration-testing/Cargo.toml                     |  2 +-
 .../src/bin/arrow-json-integration-test.rs         | 70 ++++++++++------------
 .../src/bin/flight-test-integration-client.rs      | 12 ++--
 .../src/bin/flight-test-integration-server.rs      |  8 +--
 parquet/Cargo.toml                                 |  2 +-
 5 files changed, 41 insertions(+), 53 deletions(-)

diff --git a/integration-testing/Cargo.toml b/integration-testing/Cargo.toml
index cbb6ca6..292f485 100644
--- a/integration-testing/Cargo.toml
+++ b/integration-testing/Cargo.toml
@@ -34,7 +34,7 @@ logging = ["tracing-subscriber"]
 arrow = { path = "../arrow" }
 arrow-flight = { path = "../arrow-flight" }
 async-trait = "0.1.41"
-clap = "2.33"
+clap = { version = "3", features = ["derive"] }
 futures = "0.3"
 hex = "0.4"
 prost = "0.9"
diff --git a/integration-testing/src/bin/arrow-json-integration-test.rs b/integration-testing/src/bin/arrow-json-integration-test.rs
index 2578020..1047936 100644
--- a/integration-testing/src/bin/arrow-json-integration-test.rs
+++ b/integration-testing/src/bin/arrow-json-integration-test.rs
@@ -15,52 +15,48 @@
 // specific language governing permissions and limitations
 // under the License.
 
-use std::fs::File;
-
-use clap::{App, Arg};
-
 use arrow::error::{ArrowError, Result};
 use arrow::ipc::reader::FileReader;
 use arrow::ipc::writer::FileWriter;
 use arrow::util::integration_util::*;
 use arrow_integration_testing::read_json_file;
+use clap::Parser;
+use std::fs::File;
+
+#[derive(clap::ArgEnum, Debug, Clone)]
+enum Mode {
+    ArrowToJson,
+    JsonToArrow,
+    Validate,
+}
+
+#[derive(Debug, Parser)]
+#[clap( author, version, about, long_about = None)]
+struct Args {
+    #[clap(long, help("The path to the JSON file to read."))]
+    integration: String,
+    #[clap(long, help("path to ARROW file"))]
+    arrow: String,
+    #[clap(long, help("path to JSON file"))]
+    json: String,
+    #[clap(arg_enum, long, default_value_t = Mode::Validate, help="mode of integration testing tool")]
+    mode: Mode,
+    #[clap(long, help("mode of integration testing tool"))]
+    verbose: bool,
+}
 
 fn main() -> Result<()> {
-    let matches = App::new("rust arrow-json-integration-test")
-        .arg(Arg::with_name("integration")
-            .long("integration"))
-        .arg(Arg::with_name("arrow")
-            .long("arrow")
-            .help("path to ARROW file")
-            .takes_value(true))
-        .arg(Arg::with_name("json")
-            .long("json")
-            .help("path to JSON file")
-            .takes_value(true))
-        .arg(Arg::with_name("mode")
-            .long("mode")
-            .help("mode of integration testing tool (ARROW_TO_JSON, JSON_TO_ARROW, VALIDATE)")
-            .takes_value(true)
-            .default_value("VALIDATE"))
-        .arg(Arg::with_name("verbose")
-            .long("verbose")
-            .help("enable/disable verbose mode"))
-        .get_matches();
-
-    let arrow_file = matches
-        .value_of("arrow")
-        .expect("must provide path to arrow file");
-    let json_file = matches
-        .value_of("json")
-        .expect("must provide path to json file");
-    let mode = matches.value_of("mode").unwrap();
-    let verbose = true; //matches.value_of("verbose").is_some();
+    let args = Args::parse();
+
+    let arrow_file = args.arrow;
+    let json_file = args.json;
+    let mode = args.mode;
+    let verbose = args.verbose;
 
     match mode {
-        "JSON_TO_ARROW" => json_to_arrow(json_file, arrow_file, verbose),
-        "ARROW_TO_JSON" => arrow_to_json(arrow_file, json_file, verbose),
-        "VALIDATE" => validate(arrow_file, json_file, verbose),
-        _ => panic!("mode {} not supported", mode),
+        Mode::JsonToArrow => json_to_arrow(&json_file, &arrow_file, verbose),
+        Mode::ArrowToJson => arrow_to_json(&arrow_file, &json_file, verbose),
+        Mode::Validate => validate(&arrow_file, &json_file, verbose),
     }
 }
 
diff --git a/integration-testing/src/bin/flight-test-integration-client.rs b/integration-testing/src/bin/flight-test-integration-client.rs
index 1901553..a765fee 100644
--- a/integration-testing/src/bin/flight-test-integration-client.rs
+++ b/integration-testing/src/bin/flight-test-integration-client.rs
@@ -28,14 +28,10 @@ async fn main() -> Result {
     tracing_subscriber::fmt::init();
 
     let matches = App::new("rust flight-test-integration-client")
-        .arg(Arg::with_name("host").long("host").takes_value(true))
-        .arg(Arg::with_name("port").long("port").takes_value(true))
-        .arg(Arg::with_name("path").long("path").takes_value(true))
-        .arg(
-            Arg::with_name("scenario")
-                .long("scenario")
-                .takes_value(true),
-        )
+        .arg(Arg::new("host").long("host").takes_value(true))
+        .arg(Arg::new("port").long("port").takes_value(true))
+        .arg(Arg::new("path").long("path").takes_value(true))
+        .arg(Arg::new("scenario").long("scenario").takes_value(true))
         .get_matches();
 
     let host = matches.value_of("host").expect("Host is required");
diff --git a/integration-testing/src/bin/flight-test-integration-server.rs b/integration-testing/src/bin/flight-test-integration-server.rs
index b1b2807..cbe891e 100644
--- a/integration-testing/src/bin/flight-test-integration-server.rs
+++ b/integration-testing/src/bin/flight-test-integration-server.rs
@@ -29,12 +29,8 @@ async fn main() -> Result {
 
     let matches = App::new("rust flight-test-integration-server")
         .about("Integration testing server for Flight.")
-        .arg(Arg::with_name("port").long("port").takes_value(true))
-        .arg(
-            Arg::with_name("scenario")
-                .long("scenario")
-                .takes_value(true),
-        )
+        .arg(Arg::new("port").long("port").takes_value(true))
+        .arg(Arg::new("scenario").long("scenario").takes_value(true))
         .get_matches();
 
     let port = matches.value_of("port").unwrap_or("0");
diff --git a/parquet/Cargo.toml b/parquet/Cargo.toml
index 3255f4b..623d50c 100644
--- a/parquet/Cargo.toml
+++ b/parquet/Cargo.toml
@@ -42,7 +42,7 @@ chrono = { version = "0.4", default-features = false }
 num-bigint = "0.4"
 arrow = { path = "../arrow", version = "8.0.0", optional = true, default-features = false, features = ["ipc"] }
 base64 = { version = "0.13", optional = true }
-clap = { version = "2.33.3", optional = true }
+clap = { version = "3", optional = true, features = ["derive"] }
 serde_json = { version = "1.0", features = ["preserve_order"], optional = true }
 rand = "0.8"