@@ -9,42 +9,25 @@ import (
99)
1010
1111type 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 ... )
3524 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 ,
4831 }
4932 dm .useWrapper (dm .DefaultTimeWrapper )
5033 return & dm
@@ -122,46 +105,46 @@ func (dm *mapperObject) MapperMap(fromMap map[string]interface{}, toObj interfac
122105// if set true, the field type will be checked for consistency during mapping
123106// default is false
124107func (dm * mapperObject ) SetEnabledTypeChecking (isEnabled bool ) {
125- dm .enabledTypeChecking = isEnabled
108+ dm .setting . EnabledTypeChecking = isEnabled
126109}
127110
128111func (dm * mapperObject ) IsEnabledTypeChecking () bool {
129- return dm .enabledTypeChecking
112+ return dm .setting . EnabledTypeChecking
130113}
131114
132115// SetEnabledMapperTag set enabled flag for 'Mapper' tag check
133116// if set true, 'Mapper' tag will be check during mapping's GetFieldName
134117// default is true
135118func (dm * mapperObject ) SetEnabledMapperTag (isEnabled bool ) {
136- dm .enabledMapperTag = isEnabled
119+ dm .setting . EnabledMapperTag = isEnabled
137120 dm .cleanRegisterValue ()
138121}
139122
140123func (dm * mapperObject ) IsEnabledMapperTag () bool {
141- return dm .enabledMapperTag
124+ return dm .setting . EnabledMapperTag
142125}
143126
144127// SetEnabledJsonTag set enabled flag for 'Json' tag check
145128// if set true, 'Json' tag will be check during mapping's GetFieldName
146129// default is true
147130func (dm * mapperObject ) SetEnabledJsonTag (isEnabled bool ) {
148- dm .enabledJsonTag = isEnabled
131+ dm .setting . EnabledJsonTag = isEnabled
149132 dm .cleanRegisterValue ()
150133}
151134
152135func (dm * mapperObject ) IsEnabledJsonTag () bool {
153- return dm .enabledJsonTag
136+ return dm .setting . EnabledJsonTag
154137}
155138
156139// SetEnabledAutoTypeConvert set enabled flag for auto type convert
157140// if set true, field will auto convert in Time and Unix
158141// default is true
159142func (dm * mapperObject ) SetEnabledAutoTypeConvert (isEnabled bool ) {
160- dm .enabledAutoTypeConvert = isEnabled
143+ dm .setting . EnabledAutoTypeConvert = isEnabled
161144}
162145
163146func (dm * mapperObject ) IsEnabledAutoTypeConvert () bool {
164- return dm .enabledAutoTypeConvert
147+ return dm .setting . EnabledAutoTypeConvert
165148}
166149
167150// SetEnabledMapperStructField set enabled flag for MapperStructField
@@ -171,40 +154,40 @@ func (dm *mapperObject) IsEnabledAutoTypeConvert() bool {
171154// 2. fromField and toField must be not same type
172155// default is enabled
173156func (dm * mapperObject ) SetEnabledMapperStructField (isEnabled bool ) {
174- dm .enabledMapperStructField = isEnabled
157+ dm .setting . EnabledMapperStructField = isEnabled
175158}
176159
177160func (dm * mapperObject ) IsEnabledMapperStructField () bool {
178- return dm .enabledMapperStructField
161+ return dm .setting . EnabledMapperStructField
179162}
180163
181164// SetEnabledCustomTag set enabled flag for set custom tag name
182165// if set true and set customTagName, the custom tag will be check during mapping's GetFieldName
183166// default is false
184167func (dm * mapperObject ) SetEnabledCustomTag (isEnabled bool ) {
185- dm .enabledCustomTag = isEnabled
168+ dm .setting . EnabledCustomTag = isEnabled
186169 dm .cleanRegisterValue ()
187170}
188171
189172func (dm * mapperObject ) IsEnabledCustomTag () bool {
190- return dm .enabledCustomTag
173+ return dm .setting . EnabledCustomTag
191174}
192175
193176// SetCustomTagName
194177func (dm * mapperObject ) SetCustomTagName (tagName string ) {
195- dm .customTagName = tagName
178+ dm .setting . CustomTagName = tagName
196179}
197180
198181// SetEnableFieldIgnoreTag set the enabled flag for the ignored tag
199182// in the version < 0.7.8, we use field name as the key when mapping structs if field tag is "-"
200183// from 0.7.8, we add switch enableFieldIgnoreTag which is false in default
201184// if caller enable this flag, the field will be ignored in the mapping process
202185func (dm * mapperObject ) SetEnableFieldIgnoreTag (isEnabled bool ) {
203- dm .enableFieldIgnoreTag = isEnabled
186+ dm .setting . EnableFieldIgnoreTag = isEnabled
204187}
205188
206189func (dm * mapperObject ) IsEnableFieldIgnoreTag () bool {
207- return dm .enableFieldIgnoreTag
190+ return dm .setting . EnableFieldIgnoreTag
208191}
209192
210193// GetTypeName get type name
@@ -213,6 +196,11 @@ func (dm *mapperObject) GetTypeName(obj interface{}) string {
213196 return object .String ()
214197}
215198
199+ // GetCustomTagName get CustomTagName
200+ func (dm * mapperObject ) GetCustomTagName () string {
201+ return dm .setting .CustomTagName
202+ }
203+
216204// GetFieldName get fieldName with ElemValue and index
217205// if config tag string, return tag value
218206func (dm * mapperObject ) GetFieldName (objElem reflect.Value , index int ) string {
0 commit comments