mirror of
https://github.com/RGBCube/superfreq
synced 2025-07-28 09:27:44 +00:00
config: better validation of battery charge threshold; update error handling
This commit is contained in:
parent
eb97689bc7
commit
8252f0d74e
2 changed files with 22 additions and 11 deletions
|
@ -72,8 +72,13 @@ pub struct SupportedBattery<'a> {
|
||||||
/// - Failed to set thresholds on any battery
|
/// - Failed to set thresholds on any battery
|
||||||
pub fn set_battery_charge_thresholds(start_threshold: u8, stop_threshold: u8) -> Result<()> {
|
pub fn set_battery_charge_thresholds(start_threshold: u8, stop_threshold: u8) -> Result<()> {
|
||||||
// Validate thresholds using `BatteryChargeThresholds`
|
// Validate thresholds using `BatteryChargeThresholds`
|
||||||
let thresholds = BatteryChargeThresholds::new(start_threshold, stop_threshold)
|
let thresholds =
|
||||||
.map_err(ControlError::InvalidValueError)?;
|
BatteryChargeThresholds::new(start_threshold, stop_threshold).map_err(|e| match e {
|
||||||
|
crate::config::types::ConfigError::ValidationError(msg) => {
|
||||||
|
ControlError::InvalidValueError(msg)
|
||||||
|
}
|
||||||
|
_ => ControlError::InvalidValueError(format!("Invalid battery threshold values: {e}")),
|
||||||
|
})?;
|
||||||
|
|
||||||
let power_supply_path = Path::new("/sys/class/power_supply");
|
let power_supply_path = Path::new("/sys/class/power_supply");
|
||||||
if !power_supply_path.exists() {
|
if !power_supply_path.exists() {
|
||||||
|
|
|
@ -3,24 +3,28 @@ use crate::core::TurboSetting;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use std::convert::TryFrom;
|
use std::convert::TryFrom;
|
||||||
|
|
||||||
#[derive(Deserialize, Serialize, Debug, Clone)]
|
#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq)]
|
||||||
pub struct BatteryChargeThresholds {
|
pub struct BatteryChargeThresholds {
|
||||||
pub start: u8,
|
pub start: u8,
|
||||||
pub stop: u8,
|
pub stop: u8,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl BatteryChargeThresholds {
|
impl BatteryChargeThresholds {
|
||||||
pub fn new(start: u8, stop: u8) -> Result<Self, String> {
|
pub fn new(start: u8, stop: u8) -> Result<Self, ConfigError> {
|
||||||
if start == 0 || stop == 0 {
|
if start == 0 || stop == 0 {
|
||||||
return Err("Thresholds must be greater than 0%".to_string());
|
return Err(ConfigError::ValidationError(
|
||||||
}
|
"Thresholds must be greater than 0%".to_string(),
|
||||||
if start >= stop {
|
|
||||||
return Err(format!(
|
|
||||||
"Start threshold ({start}) must be less than stop threshold ({stop})"
|
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
if start >= stop {
|
||||||
|
return Err(ConfigError::ValidationError(format!(
|
||||||
|
"Start threshold ({start}) must be less than stop threshold ({stop})"
|
||||||
|
)));
|
||||||
|
}
|
||||||
if stop > 100 {
|
if stop > 100 {
|
||||||
return Err(format!("Stop threshold ({stop}) cannot exceed 100%"));
|
return Err(ConfigError::ValidationError(format!(
|
||||||
|
"Stop threshold ({stop}) cannot exceed 100%"
|
||||||
|
)));
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(Self { start, stop })
|
Ok(Self { start, stop })
|
||||||
|
@ -28,7 +32,7 @@ impl BatteryChargeThresholds {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl TryFrom<(u8, u8)> for BatteryChargeThresholds {
|
impl TryFrom<(u8, u8)> for BatteryChargeThresholds {
|
||||||
type Error = String;
|
type Error = ConfigError;
|
||||||
|
|
||||||
fn try_from(values: (u8, u8)) -> Result<Self, Self::Error> {
|
fn try_from(values: (u8, u8)) -> Result<Self, Self::Error> {
|
||||||
let (start, stop) = values;
|
let (start, stop) = values;
|
||||||
|
@ -85,6 +89,7 @@ pub enum ConfigError {
|
||||||
TomlError(toml::de::Error),
|
TomlError(toml::de::Error),
|
||||||
NoValidConfigFound,
|
NoValidConfigFound,
|
||||||
HomeDirNotFound,
|
HomeDirNotFound,
|
||||||
|
ValidationError(String),
|
||||||
}
|
}
|
||||||
|
|
||||||
impl From<std::io::Error> for ConfigError {
|
impl From<std::io::Error> for ConfigError {
|
||||||
|
@ -106,6 +111,7 @@ impl std::fmt::Display for ConfigError {
|
||||||
Self::TomlError(e) => write!(f, "TOML parsing error: {e}"),
|
Self::TomlError(e) => write!(f, "TOML parsing error: {e}"),
|
||||||
Self::NoValidConfigFound => write!(f, "No valid configuration file found."),
|
Self::NoValidConfigFound => write!(f, "No valid configuration file found."),
|
||||||
Self::HomeDirNotFound => write!(f, "Could not determine user home directory."),
|
Self::HomeDirNotFound => write!(f, "Could not determine user home directory."),
|
||||||
|
Self::ValidationError(s) => write!(f, "Configuration validation error: {s}"),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue