2019-10-05 00:29:26 +00:00
|
|
|
use log::error;
|
2019-05-10 11:36:16 +00:00
|
|
|
use serde::{Deserialize, Deserializer};
|
|
|
|
|
2019-10-05 00:29:26 +00:00
|
|
|
use crate::config::{failure_default, LOG_TARGET_CONFIG, MAX_SCROLLBACK_LINES};
|
2019-05-10 11:36:16 +00:00
|
|
|
|
|
|
|
/// Struct for scrolling related settings
|
|
|
|
#[serde(default)]
|
|
|
|
#[derive(Deserialize, Copy, Clone, Default, Debug, PartialEq, Eq)]
|
|
|
|
pub struct Scrolling {
|
|
|
|
#[serde(deserialize_with = "failure_default")]
|
|
|
|
history: ScrollingHistory,
|
|
|
|
#[serde(deserialize_with = "failure_default")]
|
|
|
|
multiplier: ScrollingMultiplier,
|
2020-01-20 20:03:54 +00:00
|
|
|
|
|
|
|
// TODO: REMOVED
|
2019-05-10 11:36:16 +00:00
|
|
|
#[serde(deserialize_with = "failure_default")]
|
2020-01-20 20:03:54 +00:00
|
|
|
pub auto_scroll: Option<bool>,
|
2019-10-15 19:13:58 +00:00
|
|
|
|
|
|
|
// TODO: DEPRECATED
|
|
|
|
#[serde(deserialize_with = "failure_default")]
|
|
|
|
faux_multiplier: Option<ScrollingMultiplier>,
|
2019-05-10 11:36:16 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
impl Scrolling {
|
|
|
|
pub fn history(self) -> u32 {
|
|
|
|
self.history.0
|
|
|
|
}
|
|
|
|
|
|
|
|
pub fn multiplier(self) -> u8 {
|
|
|
|
self.multiplier.0
|
|
|
|
}
|
|
|
|
|
2019-10-15 19:13:58 +00:00
|
|
|
pub fn faux_multiplier(self) -> Option<u8> {
|
|
|
|
self.faux_multiplier.map(|sm| sm.0)
|
2019-05-10 11:36:16 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// Update the history size, used in ref tests
|
|
|
|
pub fn set_history(&mut self, history: u32) {
|
|
|
|
self.history = ScrollingHistory(history);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
#[derive(Copy, Clone, Debug, PartialEq, Eq, Deserialize)]
|
|
|
|
struct ScrollingMultiplier(u8);
|
|
|
|
|
|
|
|
impl Default for ScrollingMultiplier {
|
|
|
|
fn default() -> Self {
|
2020-04-15 03:50:34 +00:00
|
|
|
Self(3)
|
2019-05-10 11:36:16 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
|
|
|
|
struct ScrollingHistory(u32);
|
|
|
|
|
|
|
|
impl Default for ScrollingHistory {
|
|
|
|
fn default() -> Self {
|
2020-04-15 03:50:34 +00:00
|
|
|
Self(10_000)
|
2019-05-10 11:36:16 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
impl<'de> Deserialize<'de> for ScrollingHistory {
|
|
|
|
fn deserialize<D>(deserializer: D) -> ::std::result::Result<Self, D::Error>
|
|
|
|
where
|
|
|
|
D: Deserializer<'de>,
|
|
|
|
{
|
|
|
|
let value = serde_yaml::Value::deserialize(deserializer)?;
|
|
|
|
match u32::deserialize(value) {
|
|
|
|
Ok(lines) => {
|
|
|
|
if lines > MAX_SCROLLBACK_LINES {
|
|
|
|
error!(
|
2019-10-05 00:29:26 +00:00
|
|
|
target: LOG_TARGET_CONFIG,
|
2019-05-10 11:36:16 +00:00
|
|
|
"Problem with config: scrollback size is {}, but expected a maximum of \
|
|
|
|
{}; using {1} instead",
|
2019-10-05 00:29:26 +00:00
|
|
|
lines,
|
|
|
|
MAX_SCROLLBACK_LINES,
|
2019-05-10 11:36:16 +00:00
|
|
|
);
|
|
|
|
Ok(ScrollingHistory(MAX_SCROLLBACK_LINES))
|
|
|
|
} else {
|
|
|
|
Ok(ScrollingHistory(lines))
|
|
|
|
}
|
|
|
|
},
|
|
|
|
Err(err) => {
|
2019-10-05 00:29:26 +00:00
|
|
|
error!(
|
|
|
|
target: LOG_TARGET_CONFIG,
|
|
|
|
"Problem with config: {}; using default value", err
|
|
|
|
);
|
2019-05-10 11:36:16 +00:00
|
|
|
Ok(Default::default())
|
|
|
|
},
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|