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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
//! Mapper trait for data transformation between layers.
//!
//! Mappers transform data between different representations as it crosses
//! architectural boundaries. They convert between domain models, DTOs,
//! database models, or API representations, ensuring clean separation
//! between layers while maintaining data integrity.
//!
//! Revision History
//! - 2025-10-01T00:00:00Z @AI: Initial Mapper trait definition for bidirectional transformation.
/// Trait for mapping data between different representations.
///
/// Mappers transform data as it crosses architectural boundaries,
/// converting between domain models and external representations.
///
/// # Type Parameters
///
/// * `From` - The source data type
/// * `To` - The target data type
///
/// # Example
///
/// ```rust
/// use hexser::adapters::Mapper;
/// use hexser::HexResult;
///
/// struct DomainUser {
/// id: String,
/// email: String,
/// }
///
/// struct DbUserRow {
/// user_id: String,
/// user_email: String,
/// }
///
/// struct UserMapper;
///
/// impl Mapper<DomainUser, DbUserRow> for UserMapper {
/// fn map(&self, from: DomainUser) -> HexResult<DbUserRow> {
/// Ok(DbUserRow {
/// user_id: from.id,
/// user_email: from.email,
/// })
/// }
/// }
///
/// impl Mapper<DbUserRow, DomainUser> for UserMapper {
/// fn map(&self, from: DbUserRow) -> HexResult<DomainUser> {
/// Ok(DomainUser {
/// id: from.user_id,
/// email: from.user_email,
/// })
/// }
/// }
/// ```