Skip to content

Commit d00945f

Browse files
committed
chore: update clap dependency from v3 to v4
Signed-off-by: Matheus Cardoso <matheus@cardo.so>
1 parent b3b1692 commit d00945f

31 files changed

+1795
-632
lines changed

.vscode/launch.json

Lines changed: 538 additions & 0 deletions
Large diffs are not rendered by default.

Cargo.lock

Lines changed: 64 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,9 @@ async-trait = "0.1"
1717
bindle = { workspace = true }
1818
bytes = "1.1"
1919
chrono = "0.4"
20-
clap = { version = "3.1.15", features = ["derive", "env"] }
20+
clap = { version = "4.1", features = ["derive", "env"] }
21+
clap_complete = { version = "4.1", optional = true }
22+
clap_complete_fig = { version = "4.1", optional = true }
2123
cloud = { path = "crates/cloud" }
2224
cloud-openapi = { git = "https://github.com/fermyon/cloud-openapi" }
2325
comfy-table = "5.0"
@@ -80,12 +82,13 @@ vergen = { version = "7", default-features = false, features = [
8082
] }
8183

8284
[features]
83-
default = []
85+
default = ["generate-completions"]
8486
e2e-tests = []
8587
outbound-redis-tests = []
8688
config-provider-tests = []
8789
outbound-pg-tests = []
8890
outbound-mysql-tests = []
91+
generate-completions = ["dep:clap_complete", "dep:clap_complete_fig"]
8992

9093
[workspace]
9194
members = [

crates/abi-conformance/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ edition = { workspace = true }
77
[dependencies]
88
anyhow = "1.0.44"
99
cap-std = "0.26.1"
10-
clap = { version = "3.1.15", features = ["derive", "env"] }
10+
clap = { version = "4.1", features = ["derive", "env"] }
1111
rand = "0.8.5"
1212
rand_chacha = "0.3.1"
1313
rand_core = "0.6.3"

crates/abi-conformance/src/bin/spin-abi-conformance.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,18 +8,18 @@ use std::{
88
use wasmtime::{Config, Engine, Module};
99

1010
#[derive(Parser)]
11-
#[clap(author, version, about)]
11+
#[command(author, version, about)]
1212
pub struct Options {
1313
/// Name of Wasm file to test (or stdin if not specified)
14-
#[clap(short, long)]
14+
#[arg(short, long)]
1515
pub input: Option<PathBuf>,
1616

1717
/// Name of JSON file to write report to (or stdout if not specified)
18-
#[clap(short, long)]
18+
#[arg(short, long)]
1919
pub output: Option<PathBuf>,
2020

2121
/// Name of TOML configuration file to use
22-
#[clap(short, long)]
22+
#[arg(short, long)]
2323
pub config: Option<PathBuf>,
2424
}
2525

crates/http/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ doctest = false
1010
[dependencies]
1111
anyhow = "1.0"
1212
async-trait = "0.1"
13-
clap = "3"
13+
clap = "4.1"
1414
futures = "0.3"
1515
futures-util = "0.3.8"
1616
http = "0.2"

crates/http/src/lib.rs

Lines changed: 71 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,11 @@ mod wagi;
77

88
use std::{
99
collections::HashMap,
10+
fmt::Display,
1011
future::ready,
11-
net::{Ipv4Addr, SocketAddr, ToSocketAddrs},
12+
net::{Ipv4Addr, SocketAddr, SocketAddrV4, ToSocketAddrs},
1213
path::PathBuf,
14+
str::FromStr,
1315
sync::Arc,
1416
};
1517

@@ -56,18 +58,73 @@ pub struct HttpTrigger {
5658
component_trigger_configs: HashMap<String, HttpTriggerConfig>,
5759
}
5860

59-
#[derive(Args)]
61+
#[derive(Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord, Debug)]
62+
pub struct SocketAddress(SocketAddr);
63+
64+
impl SocketAddress {
65+
pub fn new(v4: Ipv4Addr, port: u16) -> Self {
66+
Self(SocketAddr::V4(SocketAddrV4::new(v4, port)))
67+
}
68+
}
69+
70+
impl Into<SocketAddr> for SocketAddress {
71+
fn into(self) -> SocketAddr {
72+
return self.0;
73+
}
74+
}
75+
76+
impl ToSocketAddrs for SocketAddress {
77+
type Iter = <SocketAddr as ToSocketAddrs>::Iter;
78+
79+
fn to_socket_addrs(&self) -> std::io::Result<Self::Iter> {
80+
self.0.to_socket_addrs()
81+
}
82+
}
83+
84+
impl Display for SocketAddress {
85+
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
86+
self.0.fmt(f)
87+
}
88+
}
89+
90+
impl Default for SocketAddress {
91+
fn default() -> Self {
92+
Self::new(Ipv4Addr::LOCALHOST, 3000)
93+
}
94+
}
95+
96+
impl FromStr for SocketAddress {
97+
type Err = anyhow::Error;
98+
fn from_str(addr: &str) -> Result<SocketAddress> {
99+
let addrs: Vec<SocketAddr> = addr.to_socket_addrs()?.collect();
100+
// Prefer 127.0.0.1 over e.g. [::1] because CHANGE IS HARD
101+
if let Some(addr) = addrs
102+
.iter()
103+
.find(|addr| addr.is_ipv4() && addr.ip() == Ipv4Addr::LOCALHOST)
104+
{
105+
return Ok(Self(*addr));
106+
}
107+
// Otherwise, take the first addr (OS preference)
108+
addrs
109+
.into_iter()
110+
.next()
111+
.context("couldn't resolve address")
112+
.map(Self)
113+
}
114+
}
115+
116+
#[derive(Args, Clone)]
60117
pub struct CliArgs {
61118
/// IP address and port to listen on
62-
#[clap(long = "listen", default_value = "127.0.0.1:3000", value_parser = parse_listen_addr)]
63-
pub address: SocketAddr,
119+
#[arg(long = "listen", default_value_t = SocketAddress::default())]
120+
pub address: SocketAddress,
64121

65122
/// The path to the certificate to use for https, if this is not set, normal http will be used. The cert should be in PEM format
66-
#[clap(long, env = "SPIN_TLS_CERT", requires = "tls-key")]
123+
#[arg(long, env = "SPIN_TLS_CERT", requires = "tls_key")]
67124
pub tls_cert: Option<PathBuf>,
68125

69126
/// The path to the certificate key to use for https, if this is not set, normal http will be used. The key should be in PKCS#8 format
70-
#[clap(long, env = "SPIN_TLS_KEY", requires = "tls-cert")]
127+
#[arg(long, env = "SPIN_TLS_KEY", requires = "tls_cert")]
71128
pub tls_key: Option<PathBuf>,
72129
}
73130

@@ -177,11 +234,10 @@ impl TriggerExecutor for HttpTrigger {
177234
}
178235

179236
if let Some(tls) = tls {
180-
self.serve_tls(listen_addr, tls).await?
237+
self.serve_tls(listen_addr, tls).await
181238
} else {
182-
self.serve(listen_addr).await?
183-
};
184-
Ok(())
239+
self.serve(listen_addr).await
240+
}
185241
}
186242
}
187243

@@ -293,7 +349,7 @@ impl HttpTrigger {
293349
.body(Body::empty())?)
294350
}
295351

296-
async fn serve(self, listen_addr: SocketAddr) -> Result<()> {
352+
async fn serve(self, listen_addr: SocketAddress) -> Result<()> {
297353
let self_ = Arc::new(self);
298354
let make_service = make_service_fn(|conn: &AddrStream| {
299355
let self_ = self_.clone();
@@ -307,14 +363,14 @@ impl HttpTrigger {
307363
}
308364
});
309365

310-
Server::try_bind(&listen_addr)
366+
Server::try_bind(&listen_addr.into())
311367
.with_context(|| format!("Unable to listen on {}", listen_addr))?
312368
.serve(make_service)
313369
.await?;
314370
Ok(())
315371
}
316372

317-
async fn serve_tls(self, listen_addr: SocketAddr, tls: TlsConfig) -> Result<()> {
373+
async fn serve_tls(self, listen_addr: SocketAddress, tls: TlsConfig) -> Result<()> {
318374
let self_ = Arc::new(self);
319375
let make_service = make_service_fn(|conn: &TlsStream<TcpStream>| {
320376
let self_ = self_.clone();
@@ -340,7 +396,7 @@ impl HttpTrigger {
340396
}
341397
});
342398

343-
let listener = TcpListener::bind(&listen_addr)
399+
let listener = TcpListener::bind::<SocketAddr>(listen_addr.into())
344400
.await
345401
.with_context(|| format!("Unable to listen on {}", listen_addr))?;
346402

@@ -369,19 +425,6 @@ pub struct AppInfo {
369425
pub bindle_version: Option<String>,
370426
}
371427

372-
fn parse_listen_addr(addr: &str) -> anyhow::Result<SocketAddr> {
373-
let addrs: Vec<SocketAddr> = addr.to_socket_addrs()?.collect();
374-
// Prefer 127.0.0.1 over e.g. [::1] because CHANGE IS HARD
375-
if let Some(addr) = addrs
376-
.iter()
377-
.find(|addr| addr.is_ipv4() && addr.ip() == Ipv4Addr::LOCALHOST)
378-
{
379-
return Ok(*addr);
380-
}
381-
// Otherwise, take the first addr (OS preference)
382-
addrs.into_iter().next().context("couldn't resolve address")
383-
}
384-
385428
fn set_req_uri(req: &mut Request<Body>, scheme: Scheme) -> Result<()> {
386429
const DEFAULT_HOST: &str = "localhost";
387430

@@ -649,7 +692,7 @@ mod tests {
649692

650693
#[test]
651694
fn parse_listen_addr_prefers_ipv4() {
652-
let addr = parse_listen_addr("localhost:12345").unwrap();
695+
let addr = SocketAddr::from_str("localhost:12345").unwrap();
653696
assert_eq!(addr.ip(), Ipv4Addr::LOCALHOST);
654697
assert_eq!(addr.port(), 12345);
655698
}

crates/trigger/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ edition = { workspace = true }
77
[dependencies]
88
anyhow = "1.0"
99
async-trait = "0.1"
10-
clap = { version = "3.1.15", features = ["derive", "env"] }
10+
clap = { version = "4.1", features = ["derive", "env"] }
1111
ctrlc = { version = "3.2", features = ["termination"] }
1212
dirs = "4"
1313
futures = "0.3"

0 commit comments

Comments
 (0)