use std::sync::Arc; use crate::handlers::BrevoReject; use crate::Brevo; use rand::seq::IteratorRandom; use warp::reject; use warp::Rejection; #[macro_export] macro_rules! sqlargs { ($($item:expr),+) => {{ use sqlx::Arguments; let mut args = sqlx::mysql::MySqlArguments::default(); $( args.add($item); )* args }}; } pub fn sql_reject(e: sqlx::Error) -> Rejection { reject::custom(BrevoReject::SqlError(e)) } pub fn render_reject(_: T) -> Rejection { reject::custom(BrevoReject::RenderFail) } pub fn make_link(brevo: Arc, id: &str) -> Result { brevo .config .base_url .join(id) .map(String::from) .map_err(|e| reject::custom(BrevoReject::UrlParseError(e))) } pub async fn gen_id(brevo: Arc) -> String { "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" .chars() .choose_multiple(&mut *brevo.rng.lock().await, brevo.config.link_len as usize) .into_iter() .collect() }