algohub_server/models/
shared.rs

1use rocket::form::{FromForm, FromFormField};
2use serde::{Deserialize, Serialize};
3use surrealdb::sql::Thing;
4
5#[derive(Debug, Clone, Serialize, Deserialize)]
6pub struct Record {
7    id: Option<Thing>,
8}
9
10#[derive(Debug, Clone, Serialize, Deserialize)]
11pub struct UserRecordId {
12    pub tb: String,
13    pub id: String,
14}
15
16#[rocket::async_trait]
17impl<'v> FromFormField<'v> for UserRecordId {
18    fn from_value(field: rocket::form::ValueField<'v>) -> rocket::form::Result<'v, Self> {
19        if let Some((tb, id)) = field.value.split_once(':') {
20            Ok(UserRecordId {
21                tb: tb.to_string(),
22                id: id.to_string(),
23            })
24        } else {
25            Err(field.unexpected())?
26        }
27    }
28
29    async fn from_data(field: rocket::form::DataField<'v, '_>) -> rocket::form::Result<'v, Self> {
30        Err(field.unexpected())?
31    }
32
33    fn default() -> Option<Self> {
34        None
35    }
36}
37
38impl From<Thing> for UserRecordId {
39    fn from(thing: Thing) -> Self {
40        UserRecordId {
41            tb: thing.tb,
42            id: thing.id.to_string(),
43        }
44    }
45}
46
47impl From<UserRecordId> for Thing {
48    fn from(value: UserRecordId) -> Self {
49        Thing::from((value.tb, value.id))
50    }
51}
52
53#[derive(Serialize)]
54pub struct UpdateAt {
55    pub updated_at: chrono::NaiveDateTime,
56}
57
58#[derive(FromForm, Serialize, Deserialize)]
59#[serde(crate = "rocket::serde")]
60pub struct Credentials<'c> {
61    pub id: &'c str,
62    pub token: &'c str,
63}
64
65#[derive(Serialize, Deserialize)]
66#[serde(crate = "rocket::serde")]
67pub struct OwnedCredentials {
68    pub id: String,
69    pub token: String,
70}
71
72#[derive(Serialize, Deserialize)]
73#[serde(crate = "rocket::serde")]
74pub struct OwnedId {
75    pub id: String,
76}
77
78#[derive(Serialize, Deserialize)]
79#[serde(crate = "rocket::serde")]
80pub struct Token<'r> {
81    pub token: &'r str,
82}