@@ -42,7 +42,7 @@ pub struct WindowConfig {
42
42
pub title : String ,
43
43
44
44
/// Window class.
45
- #[ serde( deserialize_with = "failure_default " ) ]
45
+ #[ serde( deserialize_with = "deserialize_class " ) ]
46
46
pub class : Class ,
47
47
48
48
/// XEmbed parent.
@@ -158,9 +158,13 @@ impl Dimensions {
158
158
}
159
159
160
160
/// Window class hint.
161
- #[ derive( Debug , Clone , PartialEq , Eq ) ]
161
+ #[ serde( default ) ]
162
+ #[ derive( Deserialize , Debug , Clone , PartialEq , Eq ) ]
162
163
pub struct Class {
164
+ #[ serde( deserialize_with = "deserialize_class_resource" ) ]
163
165
pub instance : String ,
166
+
167
+ #[ serde( deserialize_with = "deserialize_class_resource" ) ]
164
168
pub general : String ,
165
169
}
166
170
@@ -170,26 +174,42 @@ impl Default for Class {
170
174
}
171
175
}
172
176
173
- impl < ' a > Deserialize < ' a > for Class {
174
- fn deserialize < D > ( deserializer : D ) -> Result < Self , D :: Error >
175
- where
176
- D : Deserializer < ' a > ,
177
- {
178
- let value = Value :: deserialize ( deserializer) ?;
177
+ fn deserialize_class_resource < ' a , D > ( deserializer : D ) -> Result < String , D :: Error >
178
+ where
179
+ D : Deserializer < ' a > ,
180
+ {
181
+ let value = Value :: deserialize ( deserializer) ?;
182
+ match String :: deserialize ( value) {
183
+ Ok ( value) => Ok ( value) ,
184
+ Err ( err) => {
185
+ error ! (
186
+ target: LOG_TARGET_CONFIG ,
187
+ "Problem with config: {}, using default value {}" , err, DEFAULT_NAME ,
188
+ ) ;
189
+
190
+ Ok ( DEFAULT_NAME . into ( ) )
191
+ } ,
192
+ }
193
+ }
194
+
195
+ fn deserialize_class < ' a , D > ( deserializer : D ) -> Result < Class , D :: Error >
196
+ where
197
+ D : Deserializer < ' a > ,
198
+ {
199
+ let value = Value :: deserialize ( deserializer) ?;
179
200
180
- if let Value :: String ( instance) = value {
181
- return Ok ( Class { instance, general : DEFAULT_NAME . into ( ) } ) ;
182
- }
201
+ if let Value :: String ( instance) = value {
202
+ return Ok ( Class { instance, general : DEFAULT_NAME . into ( ) } ) ;
203
+ }
183
204
184
- match Self :: deserialize ( value) {
185
- Ok ( value) => Ok ( value) ,
186
- Err ( err) => {
187
- error ! (
188
- target: LOG_TARGET_CONFIG ,
189
- "Problem with config: {}; using class Alacritty" , err
190
- ) ;
191
- Ok ( Self :: default ( ) )
192
- } ,
193
- }
205
+ match Class :: deserialize ( value) {
206
+ Ok ( value) => Ok ( value) ,
207
+ Err ( err) => {
208
+ error ! (
209
+ target: LOG_TARGET_CONFIG ,
210
+ "Problem with config: {}; using class {}" , err, DEFAULT_NAME
211
+ ) ;
212
+ Ok ( Class :: default ( ) )
213
+ } ,
194
214
}
195
215
}
0 commit comments