From 0adf5a093494bdb7f5d5c0f12913133e333ddfad Mon Sep 17 00:00:00 2001 From: Joris Date: Fri, 31 Jan 2025 22:28:53 +0100 Subject: Migrate to tokio_rusqlite --- src/model/action.rs | 1 - src/model/category.rs | 4 +--- src/model/frequency.rs | 20 ++++++++++++++++++-- src/model/income.rs | 7 +++---- src/model/job.rs | 10 +++++++++- src/model/payment.rs | 9 ++++----- src/model/report.rs | 30 +++++++++++++++++++++++++++--- src/model/user.rs | 4 +--- 8 files changed, 63 insertions(+), 22 deletions(-) delete mode 100644 src/model/action.rs (limited to 'src/model') 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 { + 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 { + 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, -- cgit v1.2.3