diff options
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), + } + } +} |