use gatekeep::{FactId, SubjectSlot};
use keepsake::{CommandContext, RelationId, RevokeBySubject, SubjectRef};
use time::OffsetDateTime;
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct KeepsakeRelationTarget {
pub tenant_id: keepsake::TenantId,
pub fact: FactId,
pub subject: SubjectRef,
pub relation_id: RelationId,
pub subject_slot: Option<SubjectSlot>,
}
impl KeepsakeRelationTarget {
#[must_use]
pub fn revoke_by_subject(
&self,
at: OffsetDateTime,
context: CommandContext,
) -> RevokeBySubject {
RevokeBySubject::new(
self.tenant_id.clone(),
self.subject.clone(),
self.relation_id,
at,
context,
)
}
}