11use std:: {
22 collections:: { BTreeMap , BTreeSet } ,
33 str:: FromStr ,
4+ sync:: LazyLock ,
45 vec,
56} ;
67
@@ -18,6 +19,14 @@ use crate::{
1819 } ,
1920} ;
2021
22+ /// Pattern for an escaped environment variable reference, e.g. `$$(ESCAPED_REFERENCE)`
23+ static ESCAPED_ENV_VARS_PATTERN : LazyLock < Regex > =
24+ LazyLock :: new ( || Regex :: new ( r"\$\$\([^\)]*\)" ) . expect ( "should be a valid regular expression" ) ) ;
25+
26+ /// Pattern for a referenced environment variable, e.g. `$(ENV_VAR)`
27+ static REFERENCED_ENV_VARS_PATTERN : LazyLock < Regex > =
28+ LazyLock :: new ( || Regex :: new ( r"\$\(([^\)]+)\)" ) . expect ( "should be a valid regular expression" ) ) ;
29+
2130#[ derive( Snafu , Debug , EnumDiscriminants ) ]
2231#[ strum_discriminants( derive( IntoStaticStr ) ) ]
2332pub enum Error {
@@ -188,23 +197,13 @@ pub struct EnvVarDependencyResolver<'a> {
188197 ///
189198 /// Long dependency chains could slow down the operator.
190199 max_recursion_depth : usize ,
191-
192- /// Pattern for an escaped environment variable reference, e.g. `$$(ESCAPED_REFERENCE)`
193- escaped_env_vars_pattern : Regex ,
194-
195- /// Pattern for a referenced environment variable, e.g. `$(ENV_VAR)`
196- referenced_env_vars_pattern : Regex ,
197200}
198201
199202impl < ' a > EnvVarDependencyResolver < ' a > {
200203 pub fn new ( env_vars : & ' a EnvVarSet , max_recursion_depth : usize ) -> Self {
201204 Self {
202205 env_vars,
203206 max_recursion_depth,
204- escaped_env_vars_pattern : Regex :: new ( r"\$\$\([^\)]*\)" )
205- . expect ( "should be a valid regular expression" ) ,
206- referenced_env_vars_pattern : Regex :: new ( r"\$\(([^\)]+)\)" )
207- . expect ( "should be a valid regular expression" ) ,
208207 }
209208 }
210209
@@ -491,9 +490,9 @@ impl<'a> EnvVarDependencyResolver<'a> {
491490 /// );
492491 /// ```
493492 pub fn referenced_env_vars ( & self , value : & str ) -> Vec < & ' a EnvVar > {
494- let value_without_escapes = self . escaped_env_vars_pattern . replace_all ( value, "" ) ;
493+ let value_without_escapes = ESCAPED_ENV_VARS_PATTERN . replace_all ( value, "" ) ;
495494
496- self . referenced_env_vars_pattern
495+ REFERENCED_ENV_VARS_PATTERN
497496 . captures_iter ( & value_without_escapes)
498497 . filter_map ( |capture| capture. get ( 1 ) )
499498 . filter_map ( |regex_match| EnvVarName :: from_str ( regex_match. as_str ( ) ) . ok ( ) )
0 commit comments