feat: refactor type mapper.
This commit is contained in:
@@ -4,19 +4,22 @@ import (
|
||||
"github.com/jinzhu/copier"
|
||||
)
|
||||
|
||||
type EnumTypeConverter[DTO ~int32, MODEL ~string] struct {
|
||||
type EnumTypeConverter[DTO ~int32, ENTITY ~string] struct {
|
||||
nameMap map[int32]string
|
||||
valueMap map[string]int32
|
||||
}
|
||||
|
||||
func NewEnumTypeConverter[DTO ~int32, MODEL ~string](nameMap map[int32]string, valueMap map[string]int32) *EnumTypeConverter[DTO, MODEL] {
|
||||
return &EnumTypeConverter[DTO, MODEL]{
|
||||
func NewEnumTypeConverter[DTO ~int32, ENTITY ~string](
|
||||
nameMap map[int32]string,
|
||||
valueMap map[string]int32,
|
||||
) *EnumTypeConverter[DTO, ENTITY] {
|
||||
return &EnumTypeConverter[DTO, ENTITY]{
|
||||
valueMap: valueMap,
|
||||
nameMap: nameMap,
|
||||
}
|
||||
}
|
||||
|
||||
func (m *EnumTypeConverter[DTO, MODEL]) ToModel(dto *DTO) *MODEL {
|
||||
func (m *EnumTypeConverter[DTO, ENTITY]) ToEntity(dto *DTO) *ENTITY {
|
||||
if dto == nil {
|
||||
return nil
|
||||
}
|
||||
@@ -26,16 +29,16 @@ func (m *EnumTypeConverter[DTO, MODEL]) ToModel(dto *DTO) *MODEL {
|
||||
return nil
|
||||
}
|
||||
|
||||
model := MODEL(find)
|
||||
return &model
|
||||
entity := ENTITY(find)
|
||||
return &entity
|
||||
}
|
||||
|
||||
func (m *EnumTypeConverter[DTO, MODEL]) ToDto(model *MODEL) *DTO {
|
||||
if model == nil {
|
||||
func (m *EnumTypeConverter[DTO, ENTITY]) ToDTO(entity *ENTITY) *DTO {
|
||||
if entity == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
find, ok := m.valueMap[string(*model)]
|
||||
find, ok := m.valueMap[string(*entity)]
|
||||
if !ok {
|
||||
return nil
|
||||
}
|
||||
@@ -44,17 +47,22 @@ func (m *EnumTypeConverter[DTO, MODEL]) ToDto(model *MODEL) *DTO {
|
||||
return &dto
|
||||
}
|
||||
|
||||
func (m *EnumTypeConverter[DTO, MODEL]) NewConverterPair() []copier.TypeConverter {
|
||||
srcType := MODEL("")
|
||||
func (m *EnumTypeConverter[DTO, ENTITY]) NewConverterPair() []copier.TypeConverter {
|
||||
srcType := ENTITY("")
|
||||
dstType := DTO(0)
|
||||
|
||||
fromFn := m.ToDto
|
||||
toFn := m.ToModel
|
||||
fromFn := m.ToDTO
|
||||
toFn := m.ToEntity
|
||||
|
||||
return NewGenericTypeConverterPair(&srcType, &dstType, fromFn, toFn)
|
||||
}
|
||||
|
||||
func NewGenericTypeConverterPair[A interface{}, B interface{}](srcType A, dstType B, fromFn func(src A) B, toFn func(src B) A) []copier.TypeConverter {
|
||||
func NewGenericTypeConverterPair[A interface{}, B interface{}](
|
||||
srcType A,
|
||||
dstType B,
|
||||
fromFn func(src A) B,
|
||||
toFn func(src B) A,
|
||||
) []copier.TypeConverter {
|
||||
return []copier.TypeConverter{
|
||||
{
|
||||
SrcType: srcType,
|
||||
|
||||
Reference in New Issue
Block a user