#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum Role {
Entity,
ValueObject,
Aggregate,
DomainEvent,
DomainService,
InputPort,
OutputPort,
Repository,
UseCase,
Query,
Adapter,
Mapper,
Directive,
DirectiveHandler,
QueryHandler,
Config,
Unknown,
}
impl Role {
pub fn as_str(&self) -> &'static str {
match self {
Self::Entity => "Entity",
Self::ValueObject => "ValueObject",
Self::Aggregate => "Aggregate",
Self::DomainEvent => "DomainEvent",
Self::DomainService => "DomainService",
Self::InputPort => "InputPort",
Self::OutputPort => "OutputPort",
Self::Repository => "Repository",
Self::UseCase => "UseCase",
Self::Query => "Query",
Self::Adapter => "Adapter",
Self::Mapper => "Mapper",
Self::Directive => "Directive",
Self::DirectiveHandler => "DirectiveHandler",
Self::QueryHandler => "QueryHandler",
Self::Config => "Config",
Self::Unknown => "Unknown",
}
}
}
impl std::fmt::Display for Role {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "{}", self.as_str())
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_role_equality() {
assert_eq!(Role::Entity, Role::Entity);
assert_ne!(Role::Entity, Role::ValueObject);
}
#[test]
fn test_role_as_str() {
assert_eq!(Role::Entity.as_str(), "Entity");
assert_eq!(Role::Repository.as_str(), "Repository");
assert_eq!(Role::Directive.as_str(), "Directive");
}
#[test]
fn test_role_display() {
let role = Role::Entity;
assert_eq!(format!("{}", role), "Entity");
}
}