From 614c81c0f239940acb313e067dafc3213f399b10 Mon Sep 17 00:00:00 2001 From: mrw1593 Date: Sun, 28 May 2023 16:31:22 -0400 Subject: Add clients to the API --- src/services/id.rs | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) (limited to 'src/services/id.rs') diff --git a/src/services/id.rs b/src/services/id.rs index 7970c60..0c665ed 100644 --- a/src/services/id.rs +++ b/src/services/id.rs @@ -1,16 +1,24 @@ +use std::future::Future; + use exun::RawUnexpected; use sqlx::{Executor, MySql}; use uuid::Uuid; -use super::db; - -/// Create a unique user id, handling duplicate ID's -pub async fn new_user_id<'c>( - conn: impl Executor<'c, Database = MySql> + Clone, +/// Create a unique id, handling duplicate ID's. +/// +/// The given `unique_check` parameter returns `true` if the ID is used and +/// `false` otherwise. +pub async fn new_id< + 'c, + E: Executor<'c, Database = MySql> + Clone, + F: Future>, +>( + conn: E, + unique_check: impl Fn(E, Uuid) -> F, ) -> Result { let uuid = loop { let uuid = Uuid::new_v4(); - if !db::user_id_exists(conn.clone(), uuid).await? { + if !unique_check(conn.clone(), uuid).await? { break uuid; } }; -- cgit v1.2.3