use activitystreams_vocabulary::{
impl_activity_vocabulary, impl_default, impl_display, impl_into_vocabulary,
};
use serde::{Deserialize, Serialize};
#[derive(Clone, Copy, Debug, Eq, PartialEq, Deserialize, Serialize)]
pub enum ObjectType {
CapabilityUsage,
Role,
Branch,
Commit,
Patch,
TicketDependency,
Ticket,
Enum,
EnumValue,
Field,
FieldType,
FieldValue,
Milestone,
Release,
ReviewVerdict,
ReviewStatus,
ReviewThread,
Suggestion,
CodeQuote,
Approval,
DiffSide,
Review,
SshPublicKey,
}
impl ObjectType {
pub const CAPABILITY_USAGE: &str = "CapabilityUsage";
pub const ROLE: &str = "Role";
pub const BRANCH: &str = "Branch";
pub const COMMIT: &str = "Commit";
pub const PATCH: &str = "Patch";
pub const TICKET_DEPENDENCY: &str = "TicketDependency";
pub const TICKET: &str = "Ticket";
pub const ENUM: &str = "Enum";
pub const ENUM_VALUE: &str = "EnumValue";
pub const FIELD: &str = "Field";
pub const FIELD_TYPE: &str = "FieldType";
pub const FIELD_VALUE: &str = "FieldValue";
pub const MILESTONE: &str = "Milestone";
pub const RELEASE: &str = "Release";
pub const REVIEW_VERDICT: &str = "ReviewVerdict";
pub const REVIEW_STATUS: &str = "ReviewStatus";
pub const REVIEW_THREAD: &str = "ReviewThread";
pub const SUGGESTION: &str = "Suggestion";
pub const CODE_QUOTE: &str = "CodeQuote";
pub const APPROVAL: &str = "Approval";
pub const DIFF_SIDE: &str = "DiffSide";
pub const REVIEW: &str = "Review";
pub const SSH_PUBLIC_KEY: &str = "SshPublicKey";
pub const fn new() -> Self {
Self::CapabilityUsage
}
pub const fn as_str(&self) -> &'static str {
match self {
Self::CapabilityUsage => Self::CAPABILITY_USAGE,
Self::Role => Self::ROLE,
Self::Branch => Self::BRANCH,
Self::Commit => Self::COMMIT,
Self::Patch => Self::PATCH,
Self::TicketDependency => Self::TICKET_DEPENDENCY,
Self::Ticket => Self::TICKET,
Self::Enum => Self::ENUM,
Self::EnumValue => Self::ENUM_VALUE,
Self::Field => Self::FIELD,
Self::FieldType => Self::FIELD_TYPE,
Self::FieldValue => Self::FIELD_VALUE,
Self::Milestone => Self::MILESTONE,
Self::Release => Self::RELEASE,
Self::ReviewVerdict => Self::REVIEW_VERDICT,
Self::ReviewStatus => Self::REVIEW_STATUS,
Self::ReviewThread => Self::REVIEW_THREAD,
Self::Suggestion => Self::SUGGESTION,
Self::CodeQuote => Self::CODE_QUOTE,
Self::Approval => Self::APPROVAL,
Self::DiffSide => Self::DIFF_SIDE,
Self::Review => Self::REVIEW,
Self::SshPublicKey => Self::SSH_PUBLIC_KEY,
}
}
}
impl_default!(ObjectType);
impl_display!(ObjectType, str);
impl_activity_vocabulary!(ObjectType);
impl_into_vocabulary!(ObjectType);
#[cfg(test)]
mod tests {
use activitystreams_vocabulary::ActivityVocabulary;
use super::*;
use crate::tests::TestType;
#[test]
fn test_object() {
[
(ObjectType::CapabilityUsage, ObjectType::CAPABILITY_USAGE),
(ObjectType::Role, ObjectType::ROLE),
(ObjectType::Branch, ObjectType::BRANCH),
(ObjectType::Commit, ObjectType::COMMIT),
(ObjectType::Patch, ObjectType::PATCH),
(ObjectType::TicketDependency, ObjectType::TICKET_DEPENDENCY),
(ObjectType::Ticket, ObjectType::TICKET),
(ObjectType::Enum, ObjectType::ENUM),
(ObjectType::EnumValue, ObjectType::ENUM_VALUE),
(ObjectType::Field, ObjectType::FIELD),
(ObjectType::FieldType, ObjectType::FIELD_TYPE),
(ObjectType::FieldValue, ObjectType::FIELD_VALUE),
(ObjectType::Milestone, ObjectType::MILESTONE),
(ObjectType::Release, ObjectType::RELEASE),
(ObjectType::ReviewVerdict, ObjectType::REVIEW_VERDICT),
(ObjectType::ReviewStatus, ObjectType::REVIEW_STATUS),
(ObjectType::ReviewThread, ObjectType::REVIEW_THREAD),
(ObjectType::Suggestion, ObjectType::SUGGESTION),
(ObjectType::CodeQuote, ObjectType::CODE_QUOTE),
(ObjectType::Approval, ObjectType::APPROVAL),
(ObjectType::DiffSide, ObjectType::DIFF_SIDE),
(ObjectType::Review, ObjectType::REVIEW),
(ObjectType::SshPublicKey, ObjectType::SSH_PUBLIC_KEY),
]
.into_iter()
.for_each(|(ty, ty_str)| {
assert_eq!(ty.as_str(), ty_str);
assert_eq!(ty.kind(), ty_str);
assert_eq!(ty.as_type(), Ok(ty));
let json_str = format!(r#""{ty_str}""#);
assert_eq!(serde_json::to_string(&ty).unwrap(), json_str);
assert_eq!(
serde_json::from_str::<ObjectType>(json_str.as_str()).unwrap(),
ty
);
let test_ty = serde_json::from_str::<TestType<ObjectType>>(json_str.as_str()).unwrap();
assert_eq!(test_ty.as_type().unwrap(), ty);
});
}
}