Skip to content

Commit 97947f5

Browse files
author
Anish Cheraku
committed
code review 4.5
1 parent 375b228 commit 97947f5

File tree

3 files changed

+211
-117
lines changed

3 files changed

+211
-117
lines changed

sources/api/apiclient/Cargo.toml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,6 @@ serde_json.workspace = true
4545
signal-hook.workspace = true
4646
simplelog.workspace = true
4747
snafu = { workspace = true, features = ["futures"] }
48-
test-case.workspace = true
4948
tokio = { workspace = true, features = ["fs", "io-std", "io-util", "macros", "rt-multi-thread", "time"] }
5049
tokio-tungstenite = { workspace = true, features = ["connect"] }
5150
toml.workspace = true
@@ -55,3 +54,6 @@ tempfile.workspace = true
5554

5655
[build-dependencies]
5756
generate-readme.workspace = true
57+
58+
[dev-dependencies]
59+
test-case.workspace = true

sources/api/apiclient/src/apply.rs

Lines changed: 25 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -89,49 +89,33 @@ where
8989
resolver.resolve().await.context(ResolverFailureSnafu)
9090
}
9191

92+
/// Macro to try multiple settings resolver types in sequence, returning the first one that succeeds.
93+
macro_rules! try_resolvers {
94+
($input:expr, $($resolver_type:ty),+ $(,)?) => {
95+
$(
96+
if let Ok(r) = <$resolver_type>::try_from($input) {
97+
log::debug!("select_resolver: picked {}", stringify!($resolver_type));
98+
return Ok(Box::new(r));
99+
}
100+
)+
101+
};
102+
}
103+
92104
/// Choose which UriResolver applies to `input` (stdin, file://, http(s)://, s3://, secretsmanager://, and ssm://).
93105
fn select_resolver(input: &SettingsInput) -> Result<Box<dyn crate::uri_resolver::UriResolver>> {
94-
use crate::uri_resolver;
95-
96-
// stdin ("-")
97-
if let Ok(r) = uri_resolver::StdinUri::try_from(input) {
98-
return Ok(Box::new(r));
99-
}
100-
101-
// file://
102-
if let Ok(r) = uri_resolver::FileUri::try_from(input) {
103-
return Ok(Box::new(r));
104-
}
105-
106-
// http(s)://
107-
if let Ok(r) = uri_resolver::HttpUri::try_from(input) {
108-
return Ok(Box::new(r));
109-
}
110-
111-
// s3://
112-
if let Ok(r) = uri_resolver::S3Uri::try_from(input) {
113-
return Ok(Box::new(r));
114-
}
115-
116-
// secretsmanager://
117-
if let Ok(r) = uri_resolver::SecretsManagerArn::try_from(input) {
118-
return Ok(Box::new(r));
119-
}
120-
121-
// secretsmanager://
122-
if let Ok(r) = uri_resolver::SecretsManagerUri::try_from(input) {
123-
return Ok(Box::new(r));
124-
}
125-
126-
// arn:aws:ssm:…
127-
if let Ok(r) = uri_resolver::SsmArn::try_from(input) {
128-
return Ok(Box::new(r));
129-
}
130-
131-
// ssm://
132-
if let Ok(r) = uri_resolver::SsmUri::try_from(input) {
133-
return Ok(Box::new(r));
134-
}
106+
use crate::uri_resolver::*;
107+
108+
try_resolvers!(
109+
input,
110+
StdinUri,
111+
FileUri,
112+
HttpUri,
113+
S3Uri,
114+
SecretsManagerArn,
115+
SecretsManagerUri,
116+
SsmArn,
117+
SsmUri,
118+
);
135119

136120
error::NoResolverSnafu {
137121
input_source: input.input.clone(),

0 commit comments

Comments
 (0)