compiletime_regex/
lib.rs

1use proc_macro::TokenStream;
2use quote::quote;
3use regex::Regex;
4use syn::{parse_macro_input, LitStr};
5
6#[proc_macro]
7pub fn regex(input: TokenStream) -> TokenStream {
8    let lit_str = parse_macro_input!(input as LitStr);
9    let pat = lit_str.value();
10
11    if let Err(err) = Regex::new(&pat) {
12        return syn::Error::new(lit_str.span(), err)
13            .to_compile_error()
14            .into();
15    }
16
17    quote! { ::regex::Regex::new(#pat).unwrap() }.into()
18}