aboutsummaryrefslogtreecommitdiff
path: root/src/database/types.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/database/types.rs')
-rw-r--r--src/database/types.rs100
1 files changed, 100 insertions, 0 deletions
diff --git a/src/database/types.rs b/src/database/types.rs
new file mode 100644
index 0000000..4d2c220
--- /dev/null
+++ b/src/database/types.rs
@@ -0,0 +1,100 @@
+use serde::Serialize;
+use std::time::SystemTime;
+
+#[derive(Serialize, Clone, Debug)]
+pub struct Date {
+ date: u64,
+}
+impl Date {
+ pub fn now() -> Date {
+ Date{
+ date: SystemTime::now().duration_since(SystemTime::UNIX_EPOCH).unwrap().as_secs()
+ }
+ }
+ pub fn new(s: i64) -> Date {
+ Date {
+ date: s as u64,
+ }
+ }
+}
+
+#[derive(Serialize, Clone, Debug)]
+pub struct User {
+ username: String,
+ id: usize
+}
+impl User {
+ pub fn new(name: String, id: usize) -> User {
+ User{
+ username: name,
+ id: id
+ }
+ }
+}
+
+#[derive(Serialize, Clone, Debug)]
+pub struct Message {
+ date: Date,
+ message: String,
+ sender: User,
+ id: usize,
+ reply_to: Option<usize>, // Message ID
+ deleted: bool,
+}
+impl Message {
+ pub fn new(msg: String, sender: User, id: usize, reply_to: Option<usize>) -> Message {
+ Message {
+ date: Date::now(),
+ sender: sender,
+ message: msg,
+ id: id,
+ reply_to: reply_to,
+ deleted: false,
+ }
+ }
+
+ pub fn construct(msg: String, sender: User, id: usize, reply_to: Option<usize>, date: Date, deleted: bool) -> Message {
+ Message {
+ date: date,
+ sender: sender,
+ message: msg,
+ id: id,
+ reply_to: reply_to,
+ deleted: deleted,
+ }
+ }
+
+ pub fn id(&self) -> usize {
+ 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 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
+ }
+ }
+}
+
+#[derive(Serialize)]
+pub struct Info {
+ name: String,
+ users: usize,
+}
+impl Info {
+ pub fn get(db: std::sync::MutexGuard<crate::database::Database>) -> Info {
+ Info{
+ name: String::from("Testing"),
+ users: db.get_user_count(),
+ }
+ }
+} \ No newline at end of file