use crate::keys::Key; use chrono::NaiveDateTime; use diesel::prelude::*; use eyre::ensure; #[derive(Queryable, Selectable, Insertable)] #[diesel(table_name = crate::schema::accounts)] #[diesel(check_for_backend(diesel::sqlite::Sqlite))] pub struct Account { pub email: String, pub date: NaiveDateTime, } #[derive(Copy, Clone, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash)] pub enum OnlyZero { #[default] Zero = 0, } impl From for i32 { fn from(_value: OnlyZero) -> Self { 0 } } impl TryFrom for OnlyZero { type Error = eyre::Report; fn try_from(value: i32) -> Result { ensure!(value == 0, "tried to convert nonzero value into OnlyZero"); Ok(OnlyZero::Zero) } } #[derive(Queryable, Selectable, Insertable, Clone)] #[diesel(table_name = crate::schema::keys)] #[diesel(check_for_backend(diesel::sqlite::Sqlite))] pub struct Keys { #[diesel(serialize_as = i32)] #[diesel(deserialize_as = i32)] pub id: OnlyZero, pub email_unsubscribe_url: Key, }