ddd_toolkit_core/domain/
event.rs1use std::fmt::Debug;
2
3pub trait DomainEvent: Debug + Send + Sync + 'static {}
7
8#[cfg(test)]
9mod test {
10 use super::*;
11
12 #[derive(Debug)]
13 struct TestEvent;
14
15 impl DomainEvent for TestEvent {}
16
17 #[test]
18 fn test_double_implements_domain_event() {
19 let _event = TestEvent;
20 }
21
22 #[test]
23 fn domain_event_is_dyn_compatible() {
24 let _event: Box<dyn DomainEvent> = Box::new(TestEvent);
25 }
26
27 #[test]
28 fn debug_format_works_via_trait_object() {
29 let event: &dyn DomainEvent = &TestEvent;
30
31 assert_eq!(format!("{event:?}"), "TestEvent");
32 }
33
34 #[test]
35 fn trait_object_is_send_and_sync() {
36 fn assert_send_sync<T: Send + Sync + ?Sized>() {}
37
38 assert_send_sync::<dyn DomainEvent>();
39 }
40
41 #[test]
42 fn test_double_with_fields_implements_domain_event() {
43 #[derive(Debug)]
44 struct TestEventWithFields {
45 id: String,
46 }
47
48 impl DomainEvent for TestEventWithFields {}
49
50 let event = TestEventWithFields {
51 id: "event-1".to_string(),
52 };
53 assert_eq!(event.id, "event-1");
54
55 let event: &dyn DomainEvent = &event;
56 assert_eq!(
57 format!("{event:?}"),
58 r#"TestEventWithFields { id: "event-1" }"#
59 );
60 }
61}