regex_static_impl/
lib.rs

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(&quote! { #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(&quote! { #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(&quote! { #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}