@@ -9,42 +9,25 @@ import (
9
9
)
10
10
11
11
type mapperObject struct {
12
- ZeroValue reflect.Value
13
- DefaultTimeWrapper * TimeWrapper
14
- typeWrappers []TypeWrapper
15
- timeType reflect.Type
16
- jsonTimeType reflect.Type
17
- fieldNameMap sync.Map
18
- registerMap sync.Map
19
- enabledTypeChecking bool
20
- enabledMapperStructField bool
21
- enabledAutoTypeConvert bool
22
- enabledMapperTag bool
23
- enabledJsonTag bool
24
-
25
- enabledCustomTag bool
26
- customTagName string
27
-
28
- // in the version < 0.7.8, we use field name as the key when mapping structs if field tag is "-"
29
- // from 0.7.8, we add switch enableIgnoreFieldTag which is false in default
30
- // if caller enable this flag, the field will be ignored in the mapping process
31
- enableFieldIgnoreTag bool
32
- }
33
-
34
- func NewMapper () IMapper {
12
+ ZeroValue reflect.Value
13
+ DefaultTimeWrapper * TimeWrapper
14
+ typeWrappers []TypeWrapper
15
+ timeType reflect.Type
16
+ jsonTimeType reflect.Type
17
+ fieldNameMap sync.Map
18
+ registerMap sync.Map
19
+ setting * Setting
20
+ }
21
+
22
+ func NewMapper (opts ... Option ) IMapper {
23
+ setting := NewSetting (opts ... )
35
24
dm := mapperObject {
36
- ZeroValue : reflect.Value {},
37
- DefaultTimeWrapper : NewTimeWrapper (),
38
- typeWrappers : []TypeWrapper {},
39
- timeType : reflect .TypeOf (time .Now ()),
40
- jsonTimeType : reflect .TypeOf (JSONTime (time .Now ())),
41
- enabledTypeChecking : false ,
42
- enabledMapperStructField : true ,
43
- enabledAutoTypeConvert : true ,
44
- enabledMapperTag : true ,
45
- enabledJsonTag : true ,
46
- enabledCustomTag : false ,
47
- enableFieldIgnoreTag : false , // 保留老版本默认行为:对于tag = “-”的字段使用FieldName
25
+ ZeroValue : reflect.Value {},
26
+ DefaultTimeWrapper : NewTimeWrapper (),
27
+ typeWrappers : []TypeWrapper {},
28
+ timeType : reflect .TypeOf (time .Now ()),
29
+ jsonTimeType : reflect .TypeOf (JSONTime (time .Now ())),
30
+ setting : setting ,
48
31
}
49
32
dm .useWrapper (dm .DefaultTimeWrapper )
50
33
return & dm
@@ -122,46 +105,46 @@ func (dm *mapperObject) MapperMap(fromMap map[string]interface{}, toObj interfac
122
105
// if set true, the field type will be checked for consistency during mapping
123
106
// default is false
124
107
func (dm * mapperObject ) SetEnabledTypeChecking (isEnabled bool ) {
125
- dm .enabledTypeChecking = isEnabled
108
+ dm .setting . EnabledTypeChecking = isEnabled
126
109
}
127
110
128
111
func (dm * mapperObject ) IsEnabledTypeChecking () bool {
129
- return dm .enabledTypeChecking
112
+ return dm .setting . EnabledTypeChecking
130
113
}
131
114
132
115
// SetEnabledMapperTag set enabled flag for 'Mapper' tag check
133
116
// if set true, 'Mapper' tag will be check during mapping's GetFieldName
134
117
// default is true
135
118
func (dm * mapperObject ) SetEnabledMapperTag (isEnabled bool ) {
136
- dm .enabledMapperTag = isEnabled
119
+ dm .setting . EnabledMapperTag = isEnabled
137
120
dm .cleanRegisterValue ()
138
121
}
139
122
140
123
func (dm * mapperObject ) IsEnabledMapperTag () bool {
141
- return dm .enabledMapperTag
124
+ return dm .setting . EnabledMapperTag
142
125
}
143
126
144
127
// SetEnabledJsonTag set enabled flag for 'Json' tag check
145
128
// if set true, 'Json' tag will be check during mapping's GetFieldName
146
129
// default is true
147
130
func (dm * mapperObject ) SetEnabledJsonTag (isEnabled bool ) {
148
- dm .enabledJsonTag = isEnabled
131
+ dm .setting . EnabledJsonTag = isEnabled
149
132
dm .cleanRegisterValue ()
150
133
}
151
134
152
135
func (dm * mapperObject ) IsEnabledJsonTag () bool {
153
- return dm .enabledJsonTag
136
+ return dm .setting . EnabledJsonTag
154
137
}
155
138
156
139
// SetEnabledAutoTypeConvert set enabled flag for auto type convert
157
140
// if set true, field will auto convert in Time and Unix
158
141
// default is true
159
142
func (dm * mapperObject ) SetEnabledAutoTypeConvert (isEnabled bool ) {
160
- dm .enabledAutoTypeConvert = isEnabled
143
+ dm .setting . EnabledAutoTypeConvert = isEnabled
161
144
}
162
145
163
146
func (dm * mapperObject ) IsEnabledAutoTypeConvert () bool {
164
- return dm .enabledAutoTypeConvert
147
+ return dm .setting . EnabledAutoTypeConvert
165
148
}
166
149
167
150
// SetEnabledMapperStructField set enabled flag for MapperStructField
@@ -171,40 +154,40 @@ func (dm *mapperObject) IsEnabledAutoTypeConvert() bool {
171
154
// 2. fromField and toField must be not same type
172
155
// default is enabled
173
156
func (dm * mapperObject ) SetEnabledMapperStructField (isEnabled bool ) {
174
- dm .enabledMapperStructField = isEnabled
157
+ dm .setting . EnabledMapperStructField = isEnabled
175
158
}
176
159
177
160
func (dm * mapperObject ) IsEnabledMapperStructField () bool {
178
- return dm .enabledMapperStructField
161
+ return dm .setting . EnabledMapperStructField
179
162
}
180
163
181
164
// SetEnabledCustomTag set enabled flag for set custom tag name
182
165
// if set true and set customTagName, the custom tag will be check during mapping's GetFieldName
183
166
// default is false
184
167
func (dm * mapperObject ) SetEnabledCustomTag (isEnabled bool ) {
185
- dm .enabledCustomTag = isEnabled
168
+ dm .setting . EnabledCustomTag = isEnabled
186
169
dm .cleanRegisterValue ()
187
170
}
188
171
189
172
func (dm * mapperObject ) IsEnabledCustomTag () bool {
190
- return dm .enabledCustomTag
173
+ return dm .setting . EnabledCustomTag
191
174
}
192
175
193
176
// SetCustomTagName
194
177
func (dm * mapperObject ) SetCustomTagName (tagName string ) {
195
- dm .customTagName = tagName
178
+ dm .setting . CustomTagName = tagName
196
179
}
197
180
198
181
// SetEnableFieldIgnoreTag set the enabled flag for the ignored tag
199
182
// in the version < 0.7.8, we use field name as the key when mapping structs if field tag is "-"
200
183
// from 0.7.8, we add switch enableFieldIgnoreTag which is false in default
201
184
// if caller enable this flag, the field will be ignored in the mapping process
202
185
func (dm * mapperObject ) SetEnableFieldIgnoreTag (isEnabled bool ) {
203
- dm .enableFieldIgnoreTag = isEnabled
186
+ dm .setting . EnableFieldIgnoreTag = isEnabled
204
187
}
205
188
206
189
func (dm * mapperObject ) IsEnableFieldIgnoreTag () bool {
207
- return dm .enableFieldIgnoreTag
190
+ return dm .setting . EnableFieldIgnoreTag
208
191
}
209
192
210
193
// GetTypeName get type name
@@ -213,6 +196,11 @@ func (dm *mapperObject) GetTypeName(obj interface{}) string {
213
196
return object .String ()
214
197
}
215
198
199
+ // GetCustomTagName get CustomTagName
200
+ func (dm * mapperObject ) GetCustomTagName () string {
201
+ return dm .setting .CustomTagName
202
+ }
203
+
216
204
// GetFieldName get fieldName with ElemValue and index
217
205
// if config tag string, return tag value
218
206
func (dm * mapperObject ) GetFieldName (objElem reflect.Value , index int ) string {
0 commit comments