feat(sysctl): support using more flexible queries for variables

This commit is contained in:
Orhun Parmaksız 2021-12-07 19:48:53 +03:00
parent 830535a170
commit 082af7b458
No known key found for this signature in database
GPG key ID: F83424824B3E4B90
2 changed files with 31 additions and 4 deletions

View file

@ -57,6 +57,30 @@ impl Sysctl {
parameter
}
/// Returns the parameters that matches the given query.
pub fn get_parameters(&self, query: &str) -> Vec<&Parameter> {
let parameters = self
.parameters
.iter()
.filter(|param| {
param.name == query.replace("/", ".")
|| param.section.to_string() == query
|| match param.name.split('.').collect::<Vec<&str>>().last() {
Some(absolute_name) => absolute_name == &query.replace("/", "."),
_ => false,
}
})
.collect::<Vec<&Parameter>>();
if parameters.is_empty() {
eprintln!(
"{}: cannot stat /proc/{}: No such file or directory",
env!("CARGO_PKG_NAME").split('-').collect::<Vec<_>>()[0],
query.replace(".", "/")
)
}
parameters
}
/// Updates the parameters using the given list.
///
/// Keeps the original values.

View file

@ -121,12 +121,15 @@ impl<'a> App<'a> {
} else {
None
};
if let Some(parameter) = self.sysctl.get_parameter(&param_name) {
if let Some(new_value) = new_value {
if let Some(new_value) = new_value {
if let Some(parameter) = self.sysctl.get_parameter(&param_name) {
parameter.update_value(&new_value, self.config, &mut self.stdout)?;
} else {
parameter.display_value(self.config, &mut self.stdout)?;
}
} else {
self.sysctl
.get_parameters(&param_name)
.iter()
.try_for_each(|parameter| parameter.display_value(self.config, &mut self.stdout))?;
}
Ok(())
}