1use proc_macro2::TokenStream;
2use quote::quote;
3use regex_syntax::Parser;
4use syn::LitStr;
5
6pub fn lazy_regex(item: LitStr) -> Result<TokenStream, syn::Error> {
7 let _hir = Parser::new()
8 .parse("e! { #item }.to_string())
9 .map_err(|e| syn::Error::new(item.span(), e.to_string()))?;
10 Ok(quote! {
11 regex_static::once_cell::sync::Lazy::<regex_static::Regex>::new(|| {
12 regex_static::Regex::new(#item).unwrap()
13 })
14 })
15}
16
17pub fn static_regex(item: LitStr) -> Result<TokenStream, syn::Error> {
18 let _hir = Parser::new()
19 .parse("e! { #item }.to_string())
20 .map_err(|e| syn::Error::new(item.span(), e.to_string()))?;
21 Ok(quote! {
22 {
23 static regex: regex_static::once_cell::sync::OnceCell::<regex_static::Regex> = regex_static::once_cell::sync::OnceCell::new();
24 regex.get_or_init(|| regex_static::Regex::new(#item).unwrap())
25 }
26 })
27}
28
29pub fn regex(item: LitStr) -> Result<TokenStream, syn::Error> {
30 let _hir = Parser::new()
31 .parse("e! { #item }.to_string())
32 .map_err(|e| syn::Error::new(item.span(), e.to_string()))?;
33 Ok(quote! {
34 regex_static::Regex::new(#item).unwrap()
35 })
36}