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