use chrono::{DateTime, Utc};
use keepsake::{Keepsake, RelationDefinition};
use serde::{Deserialize, Serialize};
use sqlx::FromRow;
use uuid::Uuid;
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct MembershipCursor {
pub subject_kind: String,
pub subject_id: String,
pub keepsake_id: Uuid,
}
impl MembershipCursor {
#[must_use]
pub fn after(keepsake: &Keepsake) -> Self {
Self {
subject_kind: keepsake.subject().kind.clone(),
subject_id: keepsake.subject().id.clone(),
keepsake_id: keepsake.id(),
}
}
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct AppliedKeepsake {
pub keepsake: Keepsake,
pub duplicate_prevented: bool,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct ActiveRelation {
pub keepsake: Keepsake,
pub relation: RelationDefinition,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, FromRow)]
pub struct TimedExpiryCandidate {
pub keepsake_id: Uuid,
pub relation_id: Uuid,
pub subject_kind: String,
pub subject_id: String,
pub due_at: DateTime<Utc>,
}