algohub_server/models/
shared.rs1use 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}