@@ -39,14 +39,19 @@ pub static USER_PATH_REGEX: LazyLock<Regex> = LazyLock::new(|| Regex::new(r"\{(.
3939/// It's marginally faster to use an Array/slice over generic size, than allocating to the heap via `Vec::new()`;
4040const _S: usize = 1 ;
4141
42- pub fn parse_user_variable_path ( path_str : & str ) -> Result < PathBuf > {
43- // If the user has not provided a user defined regex, then we can just fix the path and return it
44- let user_defined_parts = extract_user_regex ( path_str) ;
42+ // TODO: Test
43+ //// Substitute the `var` variable in a string with the given `val` value.
44+ ////
45+ //// Variable format: `{{ var }}`
46+ // fn substitute<'a: 'b, 'b>(str: &'a str, var: &str, val: &str) -> std::borrow::Cow<'b, str> {
47+ // let format = format!(r"\{{\{{[[:space:]]*{}[[:space:]]*\}}\}}", var);
48+ // Regex::new(&format).unwrap().replace_all(str, val)
49+ // }
4550
46- // Serpating the calls here for refactoring purposes later.
47- // Can just call match on the extracted user_regex fnc call above to simplify if wanted.
48- let user_defined_parts = match user_defined_parts {
51+ pub fn parse_user_variable_path ( path_str : & str ) -> Result < PathBuf > {
52+ let user_defined_parts = match extract_user_regex ( path_str) {
4953 Some ( mut parts) => {
54+ trace ! ( "User defined parts INNER: {:?}" , parts) ;
5055 parts. base_path = if is_relative ( parts. base_path . to_str ( ) . unwrap ( ) ) . is_ok ( ) {
5156 is_relative ( parts. base_path . to_str ( ) . unwrap ( ) ) ?
5257 } else {
@@ -57,13 +62,18 @@ pub fn parse_user_variable_path(path_str: &str) -> Result<PathBuf> {
5762 None => return is_relative ( path_str) ,
5863 } ;
5964
65+ trace ! ( "User defined parts OUTER: {:?}" , user_defined_parts) ;
66+
6067 let base_path_parent = user_defined_parts
6168 . base_path
6269 . parent ( )
6370 . ok_or_else ( || Error :: NoParentPath ( user_defined_parts. base_path . clone ( ) ) ) ?;
6471
72+ trace ! ( "Base path parent: {:?}" , base_path_parent) ;
73+
6574 let before_reg_filename =
66- & user_defined_parts. before_regex [ user_defined_parts. before_regex . rfind ( '\\' ) . unwrap_or_default ( ) + 1 ..] ;
75+ & user_defined_parts. before_regex [ ( user_defined_parts. before_regex . rfind ( '\\' ) . unwrap_or_default ( ) + 1 ) ..] ;
76+ trace ! ( "Before regex filename: {:?}" , before_reg_filename) ;
6777
6878 let mut matching_files = Box :: new (
6979 find_match_files_from_regex_path ( base_path_parent, & user_defined_parts, before_reg_filename)
@@ -97,14 +107,20 @@ fn extract_user_regex(base_path: &str) -> Option<UserDefinedParts<'_, PathBuf>>
97107 let re = & USER_PATH_REGEX ;
98108
99109 if let Some ( captures) = re. captures ( base_path) {
100- let var = & captures[ 1 ] ;
101- let user_defined_regex = Regex :: new ( var ) . ok ( ) ?;
110+ let inner_regx = & captures[ 1 ] ;
111+ let user_defined_regex = Regex :: new ( inner_regx ) . ok ( ) ?;
102112
103113 // Everything BEFORE the user defined regex (ie : before { __ } )
104114 let start = & base_path[ 0 ..captures. get ( 0 ) . unwrap ( ) . start ( ) ] ;
105115
106116 // Everything AFTER the user defined regex (ie : after { __ } ) could be ext, or more filename
107117 let end = & base_path[ captures. get ( 0 ) . unwrap ( ) . end ( ) ..] ;
118+ let raw_ext = Some (
119+ end[ end. rfind ( '.' ) . unwrap_or_default ( ) ..]
120+ . split_whitespace ( )
121+ . next ( )
122+ . unwrap_or_default ( ) ,
123+ ) ;
108124
109125 return Some ( UserDefinedParts {
110126 base_path : PathBuf :: from ( base_path) ,
@@ -114,6 +130,7 @@ fn extract_user_regex(base_path: &str) -> Option<UserDefinedParts<'_, PathBuf>>
114130 _phantom : std:: marker:: PhantomData ,
115131 } ,
116132 suffix_ext : Some ( end) ,
133+ raw_ext,
117134 } ) ;
118135 }
119136
@@ -142,6 +159,7 @@ fn find_match_files_from_regex_path(
142159 let mut matches: Vec < DirEntry > = Vec :: new ( ) ;
143160
144161 for entry in std:: fs:: read_dir ( base_directory) . map_err ( Error :: Io ) ? {
162+ trace ! ( "Entry: {:?}" , entry) ;
145163 let entry = entry?;
146164 let metadata = entry. metadata ( ) ?;
147165 let filename = entry. file_name ( ) . into_string ( ) . unwrap_or_default ( ) ;
@@ -208,6 +226,7 @@ mod regex_filename {
208226 _phantom : std:: marker:: PhantomData ,
209227 } ,
210228 suffix_ext : Some ( ".csv" ) ,
229+ raw_ext : Some ( ".csv" ) ,
211230 } ;
212231
213232 let matches =
0 commit comments