@@ -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://).
93105fn 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