A rust macro that allows regular expression creation through independent files. Allows fully typed named groups.
append RE to each struct
5 files changed, +10 -7
+1-1.cargo/config.toml
| @@ -1,4 +1,4 @@ | ||
| 1 | 1 | [alias] |
| 2 | 2 | tr = "test --release" |
| 3 | -e = "run --example event" | |
| 3 | +e = "run --example" | |
| 4 | 4 | b = "build" |
+1-1README.md
| @@ -42,7 +42,7 @@ use regex_macro::load_regex_files; | ||
| 42 | 42 | |
| 43 | 43 | fn main() { |
| 44 | 44 | load_regex_files!("tests/regex"); |
| 45 | - let events = Event::vec_from_file("tests/samples/events.txt").unwrap(); | |
| 45 | + let events = EventRE::vec_from_file("tests/samples/events.txt").unwrap(); | |
| 46 | 46 | println!("{}", serde_json::to_string_pretty(&events).unwrap()); |
| 47 | 47 | } |
| 48 | 48 | ``` |
+1-1examples/event.rs
| @@ -2,6 +2,6 @@ use regex_macro::load_regex_files; | ||
| 2 | 2 | |
| 3 | 3 | fn main() { |
| 4 | 4 | load_regex_files!("tests/regex"); |
| 5 | - let events = Event::vec_from_file("tests/samples/events.txt").unwrap(); | |
| 5 | + let events = EventRE::vec_from_file("tests/samples/events.txt").unwrap(); | |
| 6 | 6 | println!("{}", serde_json::to_string_pretty(&events).unwrap()); |
| 7 | 7 | } |
+6-3src/lib.rs
| @@ -34,7 +34,8 @@ pub fn load_regex_files(input: TokenStream) -> TokenStream { | ||
| 34 | 34 | |
| 35 | 35 | // Generate enum variants and compiled regex objects |
| 36 | 36 | let variants = files.iter().map(|path| { |
| 37 | - let variant_name = path.file_stem().unwrap().to_str().unwrap(); | |
| 37 | + let base = path.file_stem().unwrap().to_str().unwrap(); | |
| 38 | + let variant_name = &format!("{}RE", base); | |
| 38 | 39 | let ident = Ident::new(variant_name, proc_macro2::Span::call_site()); |
| 39 | 40 | quote! { |
| 40 | 41 | pub #ident: regex::Regex |
| @@ -43,7 +44,8 @@ pub fn load_regex_files(input: TokenStream) -> TokenStream { | ||
| 43 | 44 | |
| 44 | 45 | // Generate struct initialization |
| 45 | 46 | let init_fields = files.iter().map(|path| { |
| 46 | - let variant_name = path.file_stem().unwrap().to_str().unwrap(); | |
| 47 | + let base = path.file_stem().unwrap().to_str().unwrap(); | |
| 48 | + let variant_name = &format!("{}RE", base); | |
| 47 | 49 | let ident = Ident::new(variant_name, proc_macro2::Span::call_site()); |
| 48 | 50 | let file_path = path.to_str().unwrap(); |
| 49 | 51 | quote! { |
| @@ -73,7 +75,8 @@ pub fn load_regex_files(input: TokenStream) -> TokenStream { | ||
| 73 | 75 | }; |
| 74 | 76 | |
| 75 | 77 | let structs = files.iter().map(|path| { |
| 76 | - let variant_name = path.file_stem().unwrap().to_str().unwrap(); | |
| 78 | + let base = path.file_stem().unwrap().to_str().unwrap(); | |
| 79 | + let variant_name = &format!("{}RE", base); | |
| 77 | 80 | let ident = Ident::new(variant_name, proc_macro2::Span::call_site()); |
| 78 | 81 | let file_text = fs::read_to_string(path).unwrap(); |
| 79 | 82 | let re_str = format!(r"(?mx){}", file_text); |
+1-1tests/test.rs
| @@ -3,6 +3,6 @@ use regex_macro::load_regex_files; | ||
| 3 | 3 | #[test] |
| 4 | 4 | pub fn events() { |
| 5 | 5 | load_regex_files!("./tests/regex"); |
| 6 | - let events = Event::vec_from_file("./tests/samples/events.txt"); | |
| 6 | + let events = EventRE::vec_from_file("./tests/samples/events.txt"); | |
| 7 | 7 | assert!(events.unwrap().len() == 13) |
| 8 | 8 | } |