use activitystreams_vocabulary::{Item, create_object, field_access, impl_default, impl_display};
use serde::{Deserialize, Serialize};
#[derive(
Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Deserialize, Serialize, sqlx::Type,
)]
#[serde(rename_all = "camelCase")]
#[sqlx(type_name = "collab_relationship")]
pub enum CollabRelationship {
#[sqlx(rename = "hasCollaborator")]
HasCollaborator,
#[sqlx(rename = "hasMember")]
HasMember,
}
impl CollabRelationship {
pub const HAS_COLLABORATOR: &str = "hasCollaborator";
pub const HAS_MEMBER: &str = "hasMember";
pub const fn new() -> Self {
Self::HasCollaborator
}
pub const fn as_str(&self) -> &'static str {
match self {
Self::HasCollaborator => Self::HAS_COLLABORATOR,
Self::HasMember => Self::HAS_MEMBER,
}
}
}
impl_default!(CollabRelationship);
impl_display!(CollabRelationship, str);
create_object! {
Collaborator: activitystreams_vocabulary::ObjectType::Relationship {
#[serde(skip_serializing_if = "Option::is_none")]
subject: Option<Item>,
#[serde(skip_serializing_if = "Option::is_none")]
relationship: Option<CollabRelationship>,
#[serde(skip_serializing_if = "Option::is_none")]
object: Option<Item>,
}
}
field_access! {
Collaborator {
subject: option_ref { Item },
object: option_ref { Item },
}
}
field_access! {
Collaborator {
relationship: option { CollabRelationship },
}
}