Skip to content

Commit de3437b

Browse files
authored
Fix class and cursor thickness deserialization
Fixes alacritty#3820.
1 parent f99220f commit de3437b

File tree

2 files changed

+56
-24
lines changed

2 files changed

+56
-24
lines changed

Diff for: alacritty_terminal/src/config/mod.rs

+15-3
Original file line numberDiff line numberDiff line change
@@ -277,12 +277,24 @@ impl Default for Cursor {
277277
}
278278
}
279279

280-
pub fn deserialize_cursor_thickness<'a, D>(deserializer: D) -> Result<Percentage, D::Error>
280+
fn deserialize_cursor_thickness<'a, D>(deserializer: D) -> Result<Percentage, D::Error>
281281
where
282282
D: Deserializer<'a>,
283283
{
284-
Ok(Percentage::deserialize(Value::deserialize(deserializer)?)
285-
.unwrap_or_else(|_| Percentage::new(DEFAULT_CURSOR_THICKNESS)))
284+
let value = Value::deserialize(deserializer)?;
285+
match Percentage::deserialize(value) {
286+
Ok(value) => Ok(value),
287+
Err(err) => {
288+
error!(
289+
target: LOG_TARGET_CONFIG,
290+
"Problem with config: {}, using default thickness value {}",
291+
err,
292+
DEFAULT_CURSOR_THICKNESS
293+
);
294+
295+
Ok(Percentage::new(DEFAULT_CURSOR_THICKNESS))
296+
},
297+
}
286298
}
287299

288300
#[serde(untagged)]

Diff for: alacritty_terminal/src/config/window.rs

+41-21
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ pub struct WindowConfig {
4242
pub title: String,
4343

4444
/// Window class.
45-
#[serde(deserialize_with = "failure_default")]
45+
#[serde(deserialize_with = "deserialize_class")]
4646
pub class: Class,
4747

4848
/// XEmbed parent.
@@ -158,9 +158,13 @@ impl Dimensions {
158158
}
159159

160160
/// Window class hint.
161-
#[derive(Debug, Clone, PartialEq, Eq)]
161+
#[serde(default)]
162+
#[derive(Deserialize, Debug, Clone, PartialEq, Eq)]
162163
pub struct Class {
164+
#[serde(deserialize_with = "deserialize_class_resource")]
163165
pub instance: String,
166+
167+
#[serde(deserialize_with = "deserialize_class_resource")]
164168
pub general: String,
165169
}
166170

@@ -170,26 +174,42 @@ impl Default for Class {
170174
}
171175
}
172176

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)?;
179200

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+
}
183204

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+
},
194214
}
195215
}

0 commit comments

Comments
 (0)