diff options
| author | mrw1593 <botahamec@outlook.com> | 2023-05-28 16:31:22 -0400 |
|---|---|---|
| committer | mrw1593 <botahamec@outlook.com> | 2023-05-29 10:51:10 -0400 |
| commit | 614c81c0f239940acb313e067dafc3213f399b10 (patch) | |
| tree | 68835a73c225a3b4fefa590b173db1cd9d7a28b2 /src/services/id.rs | |
| parent | e048d7d050f87e9e5bf06f01e39fd417d6868c7e (diff) | |
Add clients to the API
Diffstat (limited to 'src/services/id.rs')
| -rw-r--r-- | src/services/id.rs | 20 |
1 files changed, 14 insertions, 6 deletions
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<Output = Result<bool, RawUnexpected>>, +>( + conn: E, + unique_check: impl Fn(E, Uuid) -> F, ) -> Result<Uuid, RawUnexpected> { 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; } }; |
