use serde::Deserialize;
use super::get_belowrc_filename;
use super::get_belowrc_view_section_key;
#[derive(Clone, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum DefaultFrontView {
Cgroup,
Process,
System,
}
#[derive(Default, Deserialize)]
pub struct SummaryViewExtraRowItem {
pub alias: Option<String>,
pub field_id: String,
}
#[derive(Default, Deserialize)]
pub struct SummaryViewExtraRow {
pub title: Option<String>,
pub items: Vec<SummaryViewExtraRowItem>,
}
#[derive(Default, Deserialize)]
pub struct ViewRc {
pub default_view: Option<DefaultFrontView>,
pub collapse_cgroups: Option<bool>,
pub cgroup_name_width: Option<usize>,
pub summary_view_extra_rows: Option<Vec<SummaryViewExtraRow>>,
}
impl ViewRc {
pub fn new() -> (ViewRc, Option<String>) {
match std::fs::read_to_string(get_belowrc_filename()) {
Ok(belowrc_str) => match belowrc_str.parse::<toml::value::Value>() {
Ok(belowrc_val) => {
if let Some(viewrc_val) = belowrc_val.get(get_belowrc_view_section_key()) {
match viewrc_val.to_owned().try_into::<ViewRc>() {
Ok(viewrc) => (viewrc, None),
Err(e) => (
Default::default(),
Some(format!(
"Failed to parse belowrc::{}: {}",
get_belowrc_view_section_key(),
e
)),
),
}
} else {
Default::default()
}
}
Err(e) => (
Default::default(),
Some(format!("Failed to parse belowrc: {}", e)),
),
},
_ => (Default::default(), None),
}
}
}