diff options
author | curly <curlybryce@protonmail.com> | 2023-02-08 18:54:16 -0700 |
---|---|---|
committer | curly <curlybryce@protonmail.com> | 2023-02-08 18:54:16 -0700 |
commit | 58300710ed6bc9f0734fa3fbdaac6c38dfb8a790 (patch) | |
tree | f4567f355e79465cdade3fff88ec2aa9ef66ee17 /src/database | |
parent | 2131176edc37761e8c4bd4819e0a9f9156bb7c76 (diff) | |
download | rocket_test-58300710ed6bc9f0734fa3fbdaac6c38dfb8a790.tar.gz rocket_test-58300710ed6bc9f0734fa3fbdaac6c38dfb8a790.tar.bz2 rocket_test-58300710ed6bc9f0734fa3fbdaac6c38dfb8a790.zip |
POST and more
Diffstat (limited to 'src/database')
-rw-r--r-- | src/database/types.rs | 139 |
1 files changed, 97 insertions, 42 deletions
diff --git a/src/database/types.rs b/src/database/types.rs index 0d89adb..1a8ab86 100644 --- a/src/database/types.rs +++ b/src/database/types.rs @@ -1,59 +1,99 @@ -use serde::Serialize; +use serde::{Serialize, Deserialize}; use std::time::SystemTime; -#[derive(Serialize, Clone, Debug)] -pub struct Date { - date: u64, -} +#[derive(Deserialize, Serialize, Copy, Clone, Debug)] +// Date is the seconds from UNIX_EPOCH +pub struct Date(u64); impl Date { pub fn now() -> Date { - Date{ - date: SystemTime::now().duration_since(SystemTime::UNIX_EPOCH).unwrap().as_secs() - } + Date( + SystemTime::now() + .duration_since(SystemTime::UNIX_EPOCH).unwrap() + .as_secs() + ) } - pub fn new(s: i64) -> Date { - Date { - date: s as u64, +} +impl std::convert::From<i64> for Date { + fn from(t: i64) -> Date { + if t < 0 { + Date(0) + } else { + Date(t as u64) } } } +impl std::convert::From<Date> for sqlite::Value { + fn from(t: Date) -> sqlite::Value { + (t.0 as i64).into() + } +} #[derive(Serialize, Clone, Debug)] pub struct User { username: String, - id: usize + id: UID, } impl User { - pub fn new(name: String, id: usize) -> User { - User{ - username: name, - id: id + pub fn new(username: String, id: UID) -> User { + User { + username, + id, } } + + pub fn id(&self) -> UID { + self.id + } } -#[derive(Serialize, Clone, Debug)] +#[derive(Deserialize, Serialize, Copy, Clone, Debug)] +pub struct UID(u64); +impl UID { + pub fn new(id: u64) -> UID { + UID(id) + } +} +impl std::convert::From<u64> for UID { + fn from(t: u64) -> UID { + UID(t) + } +} +impl std::convert::From<i64> for UID { + fn from(t: i64) -> UID { + if t < 0 { + UID(0) + } else { + UID(t as u64) + } + } +} +impl std::convert::From<UID> for sqlite::Value { + fn from(t: UID) -> sqlite::Value { + (t.0 as i64).into() + } +} + +#[derive(Deserialize, Serialize, Clone, Debug)] pub struct Message { - date: Date, + id: UID, + sender: UID, message: String, - sender: User, - id: usize, - reply_to: Option<usize>, // Message ID + reply_to: Option<UID>, deleted: bool, + date: Date, } impl Message { - pub fn new(msg: String, sender: User, id: usize, reply_to: Option<usize>) -> Message { + pub fn new(message: String, sender: &User, id: UID, reply_to: Option<UID>) -> Message { Message { - date: Date::now(), - sender: sender, - message: msg, - id: id, - reply_to: reply_to, + id, + sender: sender.id(), + message, + reply_to, deleted: false, + date: Date::now(), } } - - pub fn construct(msg: String, sender: User, id: usize, reply_to: Option<usize>, date: Date, deleted: bool) -> Message { + pub fn construct(msg: String, sender: UID, id: UID, reply_to: Option<UID>, date: Date, deleted: bool) -> Message { Message { date: date, sender: sender, @@ -64,24 +104,20 @@ impl Message { } } - pub fn id(&self) -> usize { + pub fn id(&self) -> UID { self.id } - - pub fn date_as_i64(&self) -> i64 { - self.date.date as i64 - } - pub fn user_id(&self) -> i64 { - self.sender.id as i64 + pub fn sender(&self) -> UID { + self.sender } pub fn message(&self) -> String { self.message.clone() } - pub fn reply_to(&self) -> Option<i64> { - match self.reply_to { - Some(n) => Some(n as i64), - None => None - } + pub fn reply_to(&self) -> Option<UID> { + self.reply_to + } + pub fn date(&self) -> Date { + self.date } } @@ -89,7 +125,7 @@ impl Message { pub struct Info { name: String, version: &'static str, - users: usize, + users: u64, } impl Info { pub fn get(db: std::sync::MutexGuard<crate::database::Database>) -> Info { @@ -99,4 +135,23 @@ impl Info { users: db.get_user_count(), } } +} + +#[derive(Deserialize, Serialize)] +pub struct ReceiveMessage { + sender: UID, + message: String, + reply_to: Option<UID>, +} +impl ReceiveMessage { + pub fn fill(&self, id: UID) -> Message { + Message { + id, + sender: self.sender, + message: self.message.clone(), + reply_to: self.reply_to, + deleted: false, + date: Date::now(), + } + } }
\ No newline at end of file |