ft_sdk/auth/
utils.rs

1pub fn user_data_by_query(
2    conn: &mut ft_sdk::Connection,
3    query: &str,
4    param: &str,
5) -> Result<
6    (
7        ft_sdk::auth::UserId,
8        Option<String>,
9        ft_sdk::auth::ProviderData,
10    ),
11    ft_sdk::auth::UserDataError,
12> {
13    use diesel::prelude::*;
14
15    #[derive(diesel::QueryableByName)]
16    #[diesel(table_name = ft_sdk::auth::fastn_user)]
17    struct UD {
18        id: i64,
19        identity: Option<String>,
20        data: String,
21    }
22
23    let ud: UD = match diesel::sql_query(query)
24        .bind::<diesel::sql_types::Text, _>(param)
25        .load(conn)
26    {
27        Ok(v) if v.is_empty() => return Err(ft_sdk::auth::UserDataError::NoDataFound),
28        Ok(v) if v.len() > 1 => return Err(ft_sdk::auth::UserDataError::MultipleRowsFound),
29        Ok(mut v) => v.pop().unwrap(),
30        Err(diesel::result::Error::NotFound) => {
31            return Err(ft_sdk::auth::UserDataError::NoDataFound)
32        }
33        Err(e) => return Err(ft_sdk::auth::UserDataError::DatabaseError(e)),
34    };
35
36    Ok((
37        ft_sdk::auth::UserId(ud.id),
38        ud.identity,
39        serde_json::from_str(&ud.data)?,
40    ))
41}
42
43#[derive(diesel::QueryableByName, Debug)]
44pub struct Counter {
45    #[diesel(sql_type = diesel::sql_types::BigInt)]
46    pub count: i64,
47}