aboutsummaryrefslogtreecommitdiff
path: root/src/model
diff options
context:
space:
mode:
authorJoris2025-01-31 22:28:53 +0100
committerJoris2025-01-31 22:28:53 +0100
commit0adf5a093494bdb7f5d5c0f12913133e333ddfad (patch)
treeada6df0f3480647bec99429819f1bfffd36194ce /src/model
parent24eeb54a6b7159964e8887ade7fa5173b50feb3a (diff)
Migrate to tokio_rusqlite
Diffstat (limited to 'src/model')
-rw-r--r--src/model/action.rs1
-rw-r--r--src/model/category.rs4
-rw-r--r--src/model/frequency.rs20
-rw-r--r--src/model/income.rs7
-rw-r--r--src/model/job.rs10
-rw-r--r--src/model/payment.rs9
-rw-r--r--src/model/report.rs30
-rw-r--r--src/model/user.rs4
8 files changed, 63 insertions, 22 deletions
diff --git a/src/model/action.rs b/src/model/action.rs
deleted file mode 100644
index a77543a..0000000
--- a/src/model/action.rs
+++ /dev/null
@@ -1 +0,0 @@
-use serde::Serialize;
diff --git a/src/model/category.rs b/src/model/category.rs
index de08dea..ecece96 100644
--- a/src/model/category.rs
+++ b/src/model/category.rs
@@ -1,6 +1,4 @@
-use serde::Serialize;
-
-#[derive(sqlx::FromRow, Serialize)]
+#[derive(serde::Serialize, Clone)]
pub struct Category {
pub id: i64,
pub name: String,
diff --git a/src/model/frequency.rs b/src/model/frequency.rs
index bb83e27..91aab89 100644
--- a/src/model/frequency.rs
+++ b/src/model/frequency.rs
@@ -1,7 +1,7 @@
-use serde::{Deserialize, Serialize};
+use rusqlite::types::{FromSql, FromSqlError, FromSqlResult, ValueRef};
use std::{fmt, str};
-#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, sqlx::Type)]
+#[derive(Debug, Clone, Copy, serde::Serialize, serde::Deserialize, PartialEq)]
pub enum Frequency {
Punctual,
Monthly,
@@ -29,3 +29,19 @@ impl str::FromStr for Frequency {
}
}
}
+
+impl FromSql for Frequency {
+ fn column_result(value: ValueRef<'_>) -> FromSqlResult<Self> {
+ match value {
+ ValueRef::Text(text) => match std::str::from_utf8(text) {
+ Ok("Punctual") => Ok(Frequency::Punctual),
+ Ok("Monthly") => Ok(Frequency::Monthly),
+ Ok(str) => Err(FromSqlError::Other(
+ format!("Unknown frequency: {str}").into(),
+ )),
+ Err(err) => Err(FromSqlError::Other(err.into())),
+ },
+ _ => Err(FromSqlError::InvalidType),
+ }
+ }
+}
diff --git a/src/model/income.rs b/src/model/income.rs
index ef97b56..c953251 100644
--- a/src/model/income.rs
+++ b/src/model/income.rs
@@ -1,13 +1,12 @@
use chrono::NaiveDate;
-use serde::Serialize;
-#[derive(Debug, Clone, sqlx::FromRow, Serialize)]
+#[derive(Debug, Clone, serde::Serialize)]
pub struct Stat {
pub date: String,
pub amount: i64,
}
-#[derive(Debug, Clone, sqlx::FromRow, Serialize)]
+#[derive(Debug, Clone, serde::Serialize)]
pub struct Table {
pub id: i64,
pub date: String,
@@ -15,7 +14,7 @@ pub struct Table {
pub amount: i64,
}
-#[derive(Debug, Clone, sqlx::FromRow, Serialize)]
+#[derive(Debug, Clone, serde::Serialize)]
pub struct Form {
pub id: i64,
pub amount: i64,
diff --git a/src/model/job.rs b/src/model/job.rs
index 74151ae..f31cfa0 100644
--- a/src/model/job.rs
+++ b/src/model/job.rs
@@ -1,5 +1,13 @@
-#[derive(Debug, sqlx::Type)]
+use std::fmt;
+
+#[derive(Debug)]
pub enum Job {
MonthlyPayment,
WeeklyReport,
}
+
+impl fmt::Display for Job {
+ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+ write!(f, "{:?}", self)
+ }
+}
diff --git a/src/model/payment.rs b/src/model/payment.rs
index 5ce6bb9..d732528 100644
--- a/src/model/payment.rs
+++ b/src/model/payment.rs
@@ -1,9 +1,8 @@
use chrono::NaiveDate;
-use serde::Serialize;
use crate::model::frequency::Frequency;
-#[derive(Debug, sqlx::FromRow, Serialize)]
+#[derive(Debug, serde::Serialize)]
pub struct Table {
pub id: i64,
pub name: String,
@@ -15,7 +14,7 @@ pub struct Table {
pub frequency: Frequency,
}
-#[derive(Debug, sqlx::FromRow, Serialize)]
+#[derive(Debug, serde::Serialize)]
pub struct Form {
pub id: i64,
pub name: String,
@@ -26,14 +25,14 @@ pub struct Form {
pub frequency: Frequency,
}
-#[derive(Debug, sqlx::FromRow, Serialize)]
+#[derive(Debug, serde::Serialize)]
pub struct Stat {
pub start_date: String,
pub cost: i64,
pub category_id: i64,
}
-#[derive(Debug)]
+#[derive(Debug, Clone)]
pub struct Create {
pub name: String,
pub cost: i64,
diff --git a/src/model/report.rs b/src/model/report.rs
index 4858402..e944745 100644
--- a/src/model/report.rs
+++ b/src/model/report.rs
@@ -1,6 +1,7 @@
-use serde::Serialize;
+use rusqlite::types::{FromSql, FromSqlError, FromSqlResult, ValueRef};
+use std::fmt;
-#[derive(Debug, sqlx::FromRow, Serialize)]
+#[derive(Debug, serde::Serialize)]
pub struct Report {
pub date: String,
pub name: String,
@@ -8,9 +9,32 @@ pub struct Report {
pub action: Action,
}
-#[derive(Debug, PartialEq, Serialize, sqlx::Type)]
+#[derive(Debug, PartialEq, serde::Serialize)]
pub enum Action {
Created,
Updated,
Deleted,
}
+
+impl fmt::Display for Action {
+ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+ write!(f, "{:?}", self)
+ }
+}
+
+impl FromSql for Action {
+ fn column_result(value: ValueRef<'_>) -> FromSqlResult<Self> {
+ match value {
+ ValueRef::Text(text) => match std::str::from_utf8(text) {
+ Ok("Created") => Ok(Action::Created),
+ Ok("Updated") => Ok(Action::Updated),
+ Ok("Deleted") => Ok(Action::Deleted),
+ Ok(str) => Err(FromSqlError::Other(
+ format!("Unknown action: {str}").into(),
+ )),
+ Err(err) => Err(FromSqlError::Other(err.into())),
+ },
+ _ => Err(FromSqlError::InvalidType),
+ }
+ }
+}
diff --git a/src/model/user.rs b/src/model/user.rs
index e8a61bf..06165dd 100644
--- a/src/model/user.rs
+++ b/src/model/user.rs
@@ -1,6 +1,4 @@
-use serde::Serialize;
-
-#[derive(Debug, sqlx::FromRow, Clone, Serialize)]
+#[derive(Debug, Clone, serde::Serialize)]
pub struct User {
pub id: i64,
pub name: String,