1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
//! OutputPort trait for secondary adapters.
//!
//! Output ports define interfaces for interacting with external systems
//! from within the application. They represent dependencies that the application
//! needs, such as databases, message queues, or external APIs. Adapters implement
//! output ports to provide concrete implementations using specific technologies.
//!
//! Revision History
//! - 2025-10-01T00:00:00Z @AI: Initial OutputPort trait definition for secondary ports.
/// Trait for output ports that define interfaces to external systems.
///
/// Output ports are implemented by adapters that provide access to
/// infrastructure concerns like databases, messaging, or external services.
///
/// # Type Parameters
///
/// * `Request` - The type of request sent to the external system
/// * `Response` - The type of response received from the external system
///
/// # Example
///
/// ```rust
/// use hexser::ports::OutputPort;
/// use hexser::HexResult;
///
/// struct EmailRequest {
/// to: String,
/// subject: String,
/// body: String,
/// }
///
/// struct EmailResponse {
/// message_id: String,
/// }
///
/// trait EmailPort: OutputPort<EmailRequest, EmailResponse> {}
/// ```