From e0c48368d504a3708a1f4ba1a70dced983206104 Mon Sep 17 00:00:00 2001 From: Ladislav Hano Date: Mon, 27 Jan 2025 18:00:15 +0100 Subject: [PATCH] feat: add LazyLock to regexes --- src/commands/moover/moove.rs | 10 ++++++---- src/commands/voice/radio/radio_utils.rs | 18 ++++++++---------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/commands/moover/moove.rs b/src/commands/moover/moove.rs index 046e433..c1a1414 100644 --- a/src/commands/moover/moove.rs +++ b/src/commands/moover/moove.rs @@ -1,4 +1,4 @@ -use std::sync::Arc; +use std::sync::{Arc, LazyLock}; use std::time::Duration; use anyhow::Context; @@ -6,17 +6,19 @@ use serenity::builder::{CreateAttachment, CreateEmbed, CreateMessage}; use serenity::http::Http; use serenity::model::channel::Message; use tokio::time::sleep; -use regex::Regex; use serenity::model::id::ChannelId; +use regex::Regex; + +static RE_CHANNEL_ID: LazyLock = LazyLock::new(|| Regex::new(r"<#[0-9]*>$").unwrap()); + /// Checks if the message should be mooved /// If the message should be mooved, try to move it and return Ok if mooved succesfully pub async fn moove_check(msg: &Message) -> Option { let word_count = msg.content.trim().split_whitespace().count(); - let re = Regex::new(r"<#[0-9]*>$").unwrap(); - if word_count != 1 || re.captures(&msg.content).is_none() { + if word_count != 1 || RE_CHANNEL_ID.captures(&msg.content).is_none() { return None } diff --git a/src/commands/voice/radio/radio_utils.rs b/src/commands/voice/radio/radio_utils.rs index c207dfc..84d4d8f 100644 --- a/src/commands/voice/radio/radio_utils.rs +++ b/src/commands/voice/radio/radio_utils.rs @@ -1,3 +1,5 @@ +use std::sync::LazyLock; + use poise::CreateReply; use radiobrowser::{ApiStation, StationSearchBuilder}; use regex::Regex; @@ -118,20 +120,16 @@ pub enum LinkString { String } -pub fn link_or_string(haystack: &str) -> LinkString { - let Ok(re) = Regex::new(r"^https?://([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$") else { - panic!("Wrong regex expression!"); - }; +static RE_URL: LazyLock = LazyLock::new(|| Regex::new(r"^https?://([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$").unwrap()); - return if re.is_match(haystack) { LinkString::Link } else { LinkString::String } +pub fn link_or_string(haystack: &str) -> LinkString { + return if RE_URL.is_match(haystack) { LinkString::Link } else { LinkString::String } } -pub fn parse_radio_autocomplete(haystack: &str) -> Option<(String, String, String)> { - let Ok(re) = Regex::new(r"^Name: (.*) Country: (.*) Language: (.*)") else { - panic!("Wrong regex expression!"); - }; +static RE_AUTOCOMPLETE: LazyLock = LazyLock::new(|| Regex::new(r"^Name: (.*) Country: (.*) Language: (.*)").unwrap()); - let Some(captures) = re.captures(haystack) else { +pub fn parse_radio_autocomplete(haystack: &str) -> Option<(String, String, String)> { + let Some(captures) = RE_AUTOCOMPLETE.captures(haystack) else { return None };