@@ -50,6 +50,13 @@ pub struct ResolverSetting {
50
50
pub argument : Option < Vec < ResolverArgument > > ,
51
51
}
52
52
53
+ #[ derive( Deserialize , Debug , Clone ) ]
54
+ pub struct FieldSetting {
55
+ pub target_type : String ,
56
+ pub target_field : String ,
57
+ pub replace_field_type : Option < String > ,
58
+ }
59
+
53
60
#[ derive( Deserialize , Debug , Clone ) ]
54
61
pub struct Additional {
55
62
pub body : String ,
@@ -93,7 +100,13 @@ pub struct DefaultSetting {
93
100
pub enum_rename_items : Option < String > ,
94
101
}
95
102
96
- pub type FieldsResolverSetting < ' a > = HashMap < String , & ' a ResolverSetting > ;
103
+ pub type DefinedEnumName = String ;
104
+ pub type DefinedTypeName = String ;
105
+ pub type DefinedFieldName = String ;
106
+
107
+ pub type FieldsResolverSetting < ' a > = HashMap < DefinedFieldName , & ' a ResolverSetting > ;
108
+ pub type FieldsSetting < ' a > = HashMap < DefinedFieldName , & ' a FieldSetting > ;
109
+
97
110
#[ derive( Deserialize , Default , Debug ) ]
98
111
pub struct RendererConfig {
99
112
pub using : Option < HashMap < String , String > > ,
@@ -106,6 +119,7 @@ pub struct RendererConfig {
106
119
pub additional : Option < Vec < Additional > > ,
107
120
pub ignore : Option < Ignore > ,
108
121
pub r#enum : Option < Vec < EnumSetting > > ,
122
+ pub field : Option < Vec < FieldSetting > > ,
109
123
}
110
124
111
125
impl RendererConfig {
@@ -127,25 +141,25 @@ impl RendererConfig {
127
141
}
128
142
129
143
/// if a type contained this set, the field that has the type supposed to be a member instead of resolver method.
130
- pub fn custom_member_types ( & self ) -> HashSet < String > {
144
+ pub fn custom_member_types ( & self ) -> HashSet < DefinedTypeName > {
131
145
match self . custom_member_types . as_ref ( ) {
132
- None => HashSet :: < String > :: new ( ) ,
146
+ None => HashSet :: < DefinedTypeName > :: new ( ) ,
133
147
Some ( member_types) => member_types. iter ( ) . map ( |v| v. to_string ( ) ) . collect ( ) ,
134
148
}
135
149
}
136
150
137
- pub fn resolver_setting ( & self ) -> HashMap < String , FieldsResolverSetting > {
151
+ pub fn resolver_setting ( & self ) -> HashMap < DefinedTypeName , FieldsResolverSetting > {
138
152
match self . resolver . as_ref ( ) {
139
153
None => return HashMap :: new ( ) ,
140
154
Some ( resolver) => {
141
155
if resolver. is_empty ( ) {
142
156
return HashMap :: new ( ) ;
143
157
} else {
144
- let mut result = HashMap :: < String , HashMap < String , & ResolverSetting > > :: new ( ) ;
158
+ let mut result = HashMap :: < DefinedTypeName , FieldsResolverSetting > :: new ( ) ;
145
159
for each_resolver in resolver. iter ( ) {
146
160
let field_and_resolver_type = result
147
161
. entry ( each_resolver. target_type . to_string ( ) )
148
- . or_insert ( HashMap :: < String , & ResolverSetting > :: new ( ) ) ;
162
+ . or_insert ( FieldsResolverSetting :: new ( ) ) ;
149
163
field_and_resolver_type
150
164
. insert ( each_resolver. target_field . to_string ( ) , each_resolver) ;
151
165
}
@@ -155,7 +169,29 @@ impl RendererConfig {
155
169
}
156
170
}
157
171
158
- pub fn enum_settings ( & self ) -> HashMap < String , EnumSetting > {
172
+ pub fn field_setting ( & self ) -> HashMap < DefinedTypeName , FieldsSetting > {
173
+ match self . field . as_ref ( ) {
174
+ None => return HashMap :: new ( ) ,
175
+ Some ( resolver) => {
176
+ if resolver. is_empty ( ) {
177
+ return HashMap :: new ( ) ;
178
+ } else {
179
+ let mut result = HashMap :: < DefinedTypeName , FieldsSetting > :: new ( ) ;
180
+ for each_field in resolver. iter ( ) {
181
+ let field_and_resolver_type = result
182
+ . entry ( each_field. target_type . to_string ( ) )
183
+ . or_insert ( FieldsSetting :: new ( ) ) ;
184
+
185
+ field_and_resolver_type
186
+ . insert ( each_field. target_field . to_string ( ) , each_field) ;
187
+ }
188
+ result
189
+ }
190
+ }
191
+ }
192
+ }
193
+
194
+ pub fn enum_settings ( & self ) -> HashMap < DefinedEnumName , EnumSetting > {
159
195
match self . r#enum . as_ref ( ) {
160
196
None => HashMap :: new ( ) ,
161
197
Some ( enum_settings) => {
@@ -165,20 +201,20 @@ impl RendererConfig {
165
201
enum_settings
166
202
. into_iter ( )
167
203
. map ( |each_enum| ( each_enum. target_enum . to_string ( ) , each_enum. clone ( ) ) )
168
- . collect :: < HashMap < String , EnumSetting > > ( )
204
+ . collect :: < HashMap < DefinedEnumName , EnumSetting > > ( )
169
205
}
170
206
}
171
207
}
172
208
}
173
209
174
- pub fn hidden_fields ( & self ) -> HashMap < String , HiddenFields > {
210
+ pub fn hidden_fields ( & self ) -> HashMap < DefinedTypeName , HiddenFields > {
175
211
match self . hidden_field . as_ref ( ) {
176
212
None => return HashMap :: new ( ) ,
177
213
Some ( hidden_field) => {
178
214
if hidden_field. is_empty ( ) {
179
215
return HashMap :: new ( ) ;
180
216
} else {
181
- let mut result = HashMap :: < String , HiddenFields > :: new ( ) ;
217
+ let mut result = HashMap :: < DefinedTypeName , HiddenFields > :: new ( ) ;
182
218
for each_hidden_field in hidden_field. iter ( ) {
183
219
let hidden_field = result
184
220
. entry ( each_hidden_field. target_type . to_string ( ) )
@@ -199,14 +235,14 @@ impl RendererConfig {
199
235
}
200
236
}
201
237
202
- pub fn additional_resolvers ( & self ) -> HashMap < String , CustomResolvers > {
238
+ pub fn additional_resolvers ( & self ) -> HashMap < DefinedTypeName , CustomResolvers > {
203
239
match self . additional_resolver . as_ref ( ) {
204
240
None => return HashMap :: new ( ) ,
205
241
Some ( additional_resolver) => {
206
242
if additional_resolver. is_empty ( ) {
207
243
return HashMap :: new ( ) ;
208
244
} else {
209
- let mut result = HashMap :: < String , CustomResolvers > :: new ( ) ;
245
+ let mut result = HashMap :: < DefinedTypeName , CustomResolvers > :: new ( ) ;
210
246
for custom_resolver in additional_resolver. iter ( ) {
211
247
let custom_resolvers = result
212
248
. entry ( custom_resolver. target_type . to_string ( ) )
0 commit comments