aboutsummaryrefslogtreecommitdiff
path: root/src/database/types.rs
diff options
context:
space:
mode:
authorcurly <curlybryce@protonmail.com>2023-02-08 18:54:16 -0700
committercurly <curlybryce@protonmail.com>2023-02-08 18:54:16 -0700
commit58300710ed6bc9f0734fa3fbdaac6c38dfb8a790 (patch)
treef4567f355e79465cdade3fff88ec2aa9ef66ee17 /src/database/types.rs
parent2131176edc37761e8c4bd4819e0a9f9156bb7c76 (diff)
downloadrocket_test-58300710ed6bc9f0734fa3fbdaac6c38dfb8a790.tar.gz
rocket_test-58300710ed6bc9f0734fa3fbdaac6c38dfb8a790.tar.bz2
rocket_test-58300710ed6bc9f0734fa3fbdaac6c38dfb8a790.zip
POST and more
Diffstat (limited to 'src/database/types.rs')
-rw-r--r--src/database/types.rs139
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