43 lines
1.1 KiB
Rust
43 lines
1.1 KiB
Rust
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<OnlyZero> for i32 {
|
|
fn from(_value: OnlyZero) -> Self {
|
|
0
|
|
}
|
|
}
|
|
|
|
impl TryFrom<i32> for OnlyZero {
|
|
type Error = eyre::Report;
|
|
|
|
fn try_from(value: i32) -> Result<Self, Self::Error> {
|
|
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<ed25519_dalek::SigningKey>,
|
|
}
|