diff options
author | Joris | 2025-01-31 22:28:53 +0100 |
---|---|---|
committer | Joris | 2025-01-31 22:28:53 +0100 |
commit | 0adf5a093494bdb7f5d5c0f12913133e333ddfad (patch) | |
tree | ada6df0f3480647bec99429819f1bfffd36194ce /src/model/frequency.rs | |
parent | 24eeb54a6b7159964e8887ade7fa5173b50feb3a (diff) |
Migrate to tokio_rusqlite
Diffstat (limited to 'src/model/frequency.rs')
-rw-r--r-- | src/model/frequency.rs | 20 |
1 files changed, 18 insertions, 2 deletions
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), + } + } +} |