52 lines
1.2 KiB
Go
52 lines
1.2 KiB
Go
package mapper
|
|
|
|
import (
|
|
"github.com/jinzhu/copier"
|
|
)
|
|
|
|
type CopierMapper[DTO any, ENTITY any] struct {
|
|
copierOption copier.Option
|
|
}
|
|
|
|
func NewCopierMapper[DTO any, ENTITY any]() *CopierMapper[DTO, ENTITY] {
|
|
return &CopierMapper[DTO, ENTITY]{
|
|
copierOption: copier.Option{
|
|
Converters: []copier.TypeConverter{},
|
|
},
|
|
}
|
|
}
|
|
|
|
func (m *CopierMapper[DTO, ENTITY]) AppendConverter(converter copier.TypeConverter) {
|
|
m.copierOption.Converters = append(m.copierOption.Converters, converter)
|
|
}
|
|
|
|
func (m *CopierMapper[DTO, ENTITY]) AppendConverters(converters []copier.TypeConverter) {
|
|
m.copierOption.Converters = append(m.copierOption.Converters, converters...)
|
|
}
|
|
|
|
func (m *CopierMapper[DTO, ENTITY]) ToEntity(dto *DTO) *ENTITY {
|
|
if dto == nil {
|
|
return nil
|
|
}
|
|
|
|
var entity ENTITY
|
|
if err := copier.CopyWithOption(&entity, dto, m.copierOption); err != nil {
|
|
panic(err) // Handle error appropriately in production code
|
|
}
|
|
|
|
return &entity
|
|
}
|
|
|
|
func (m *CopierMapper[DTO, ENTITY]) ToDTO(entity *ENTITY) *DTO {
|
|
if entity == nil {
|
|
return nil
|
|
}
|
|
|
|
var dto DTO
|
|
if err := copier.CopyWithOption(&dto, entity, m.copierOption); err != nil {
|
|
panic(err) // Handle error appropriately in production code
|
|
}
|
|
|
|
return &dto
|
|
}
|