This repository has been archived on 2025-08-14. You can view files and clone it, but you cannot make any changes to it's state, such as pushing and creating new issues, pull requests or comments.
subscribe-list/src/models.rs
2024-04-08 23:39:40 -07:00

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>,
}