From 392a35b0af6d2c75fe3e993ede9460323a5b940c Mon Sep 17 00:00:00 2001 From: Scott Davidson Date: Fri, 31 Mar 2023 16:45:16 +0100 Subject: [PATCH 1/5] Add basic CLI --- Cargo.toml | 1 + src/main.rs | 16 ++++++++++++++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 658da43..eea125b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -35,6 +35,7 @@ tracing-subscriber = { version = "0.3", features = ["env-filter"] } url = { version = "2", features = ["serde"] } validator = { version = "0.16", features = ["derive"] } zerocopy = { version = "0.6.1", features = ["alloc", "simd"] } +clap = { version = "4.2.1", features = ["derive", "env"] } [dev-dependencies] regex = "1" diff --git a/src/main.rs b/src/main.rs index 26cf9f8..36c573d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -22,6 +22,7 @@ //! * [ndarray] provides [NumPy](https://numpy.orgq)-like n-dimensional arrays used in numerical //! computation. +use clap::Parser; use tokio::signal; use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt}; @@ -34,15 +35,26 @@ mod operations; mod s3_client; mod validated_json; +/// S3 Active Storage Proxy command line interface +#[derive(Debug, Parser)] +struct CommandLineArgs { + #[arg(long, default_value = "0.0.0.0", env = "S3_ACTIVE_STORAGE_HOST")] + host: String, + #[arg(long, default_value = "8080", env = "S3_ACTIVE_STORAGE_PORT")] + port: String, +} + /// Application entry point #[tokio::main] async fn main() { + let args = CommandLineArgs::parse(); + init_tracing(); let router = app::router(); - // run it with hyper on localhost:8080 - axum::Server::bind(&"0.0.0.0:8080".parse().unwrap()) + // run it with hyper + axum::Server::bind(&format!("{}:{}", args.host, args.port).parse().unwrap()) .serve(router.into_make_service()) .with_graceful_shutdown(shutdown_signal()) .await From 2dfe7d8fc2f299e0bb1f8ec546b947a2b67f7a24 Mon Sep 17 00:00:00 2001 From: Scott Davidson <49713135+sd109@users.noreply.github.com> Date: Wed, 5 Apr 2023 11:20:10 +0100 Subject: [PATCH 2/5] Use u16 for port Co-authored-by: Mark Goddard --- src/main.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main.rs b/src/main.rs index 36c573d..c8efb4f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -40,8 +40,8 @@ mod validated_json; struct CommandLineArgs { #[arg(long, default_value = "0.0.0.0", env = "S3_ACTIVE_STORAGE_HOST")] host: String, - #[arg(long, default_value = "8080", env = "S3_ACTIVE_STORAGE_PORT")] - port: String, + #[arg(long, default_value = 8080, env = "S3_ACTIVE_STORAGE_PORT")] + port: u16, } /// Application entry point From 9af15dea907a0501df7d4153867dcdc98ddf6676 Mon Sep 17 00:00:00 2001 From: Scott Davidson Date: Wed, 5 Apr 2023 11:21:55 +0100 Subject: [PATCH 3/5] Use default_value_t for non-string args --- src/main.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main.rs b/src/main.rs index c8efb4f..3d07ec9 100644 --- a/src/main.rs +++ b/src/main.rs @@ -40,7 +40,7 @@ mod validated_json; struct CommandLineArgs { #[arg(long, default_value = "0.0.0.0", env = "S3_ACTIVE_STORAGE_HOST")] host: String, - #[arg(long, default_value = 8080, env = "S3_ACTIVE_STORAGE_PORT")] + #[arg(long, default_value_t = 8080, env = "S3_ACTIVE_STORAGE_PORT")] port: u16, } From 0d3813a9b1b137e46144f08c367df5b97eb59e05 Mon Sep 17 00:00:00 2001 From: Scott Davidson Date: Wed, 5 Apr 2023 11:22:48 +0100 Subject: [PATCH 4/5] Fix: alphabetical --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index eea125b..0dff8f7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -15,6 +15,7 @@ aws-smithy-http = "0.54" aws-smithy-types = "0.54" aws-types = "0.54" axum = { version = "0.6", features = ["headers"] } +clap = { version = "4.2.1", features = ["derive", "env"] } http = "*" hyper = { version = "0.14", features = ["full"] } maligned = "0.2.1" @@ -35,7 +36,6 @@ tracing-subscriber = { version = "0.3", features = ["env-filter"] } url = { version = "2", features = ["serde"] } validator = { version = "0.16", features = ["derive"] } zerocopy = { version = "0.6.1", features = ["alloc", "simd"] } -clap = { version = "4.2.1", features = ["derive", "env"] } [dev-dependencies] regex = "1" From 853c722194b43d9ca93931f78681391e008a16f0 Mon Sep 17 00:00:00 2001 From: Scott Davidson Date: Wed, 5 Apr 2023 11:25:46 +0100 Subject: [PATCH 5/5] Add CLI help strings --- src/main.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main.rs b/src/main.rs index 3d07ec9..28ded89 100644 --- a/src/main.rs +++ b/src/main.rs @@ -38,8 +38,10 @@ mod validated_json; /// S3 Active Storage Proxy command line interface #[derive(Debug, Parser)] struct CommandLineArgs { + /// The IP address on which the proxy should listen #[arg(long, default_value = "0.0.0.0", env = "S3_ACTIVE_STORAGE_HOST")] host: String, + /// The port to which the proxy should bind #[arg(long, default_value_t = 8080, env = "S3_ACTIVE_STORAGE_PORT")] port: u16, }