use serde::{Deserialize, Serialize};
use uuid::Uuid;
use crate::error::Result;
use super::validate_not_empty;
pub type KeepsakeId = Uuid;
pub type RelationId = Uuid;
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)]
pub struct SubjectRef {
pub kind: String,
pub id: String,
}
impl SubjectRef {
pub fn new(kind: impl Into<String>, id: impl Into<String>) -> Result<Self> {
let subject = Self {
kind: kind.into(),
id: id.into(),
};
subject.validate()?;
Ok(subject)
}
pub fn validate(&self) -> Result<()> {
validate_not_empty("subject.kind", &self.kind)?;
validate_not_empty("subject.id", &self.id)
}
}
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)]
pub struct ActorRef {
pub kind: String,
pub id: String,
}
impl ActorRef {
pub fn new(kind: impl Into<String>, id: impl Into<String>) -> Result<Self> {
let actor = Self {
kind: kind.into(),
id: id.into(),
};
actor.validate()?;
Ok(actor)
}
pub fn validate(&self) -> Result<()> {
validate_not_empty("actor.kind", &self.kind)?;
validate_not_empty("actor.id", &self.id)
}
}