diff --git a/build.rs b/build.rs
index 47e69e0..8318948 100644
--- a/build.rs
+++ b/build.rs
@@ -3,26 +3,38 @@
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
-use std::{path::PathBuf, io::Error};
+use std::{
+ fs,
+ io::{self, Error},
+ path::PathBuf,
+};
use clap_complete::{generate_to, shells, Generator};
include!("src/cli.rs");
+const OUTDIR: &str = "completions";
+
fn main() -> Result<(), Error> {
- let outdir = "completions";
let mut cmd = build_cli();
- let path = generate_completions(shells::Bash, &mut cmd, outdir)?;
- println!("cargo:debug=completion file is generated: {:?}", path);
- let path = generate_completions(shells::Zsh, &mut cmd, outdir)?;
- println!("cargo:debug=completion file is generated: {:?}", path);
- let path = generate_completions(shells::Fish, &mut cmd, outdir)?;
- println!("cargo:debug=completion file is generated: {:?}", path);
+ if let Err(why) = fs::create_dir(OUTDIR) {
+ if why.kind() != io::ErrorKind::AlreadyExists {
+ eprintln!("cargo:error=could not create directory: {OUTDIR}");
+ return Err(why);
+ }
+ }
+
+ let path = generate_completions(shells::Bash, &mut cmd)?;
+ println!("cargo:debug=completion file is generated: {path:?}");
+ let path = generate_completions(shells::Zsh, &mut cmd)?;
+ println!("cargo:debug=completion file is generated: {path:?}");
+ let path = generate_completions(shells::Fish, &mut cmd)?;
+ println!("cargo:debug=completion file is generated: {path:?}");
Ok(())
}
-fn generate_completions(shell: G, cmd: &mut clap::Command, outdir: &str) -> Result {
- generate_to(shell, cmd, "lamp", outdir)
+fn generate_completions(shell: G, cmd: &mut clap::Command) -> Result {
+ generate_to(shell, cmd, env!("CARGO_PKG_NAME"), OUTDIR)
}
diff --git a/src/cli.rs b/src/cli.rs
index 7449fd4..d5c97b8 100644
--- a/src/cli.rs
+++ b/src/cli.rs
@@ -76,8 +76,8 @@ pub fn build_cli() -> App<'static> {
.long_help(
r#"You can choose between these controller types:
raw: uses the raw values found in the device files
-lin: uses percentage values (0.0 - 1.0) with a linear curve for the actual brightness
-log: uses percentage values (0.0 - 1.0) with a logarithmic curve for the actual brightness
+lin: uses percentage values (0.0 - 1.0) with a linear curve
+log: uses percentage values (0.0 - 1.0) with a logarithmic curve
the perceived brightness for the human eyes should be linear with this controller
"#,
),
diff --git a/src/controllers.rs b/src/controllers.rs
index a4d4923..cc49b85 100644
--- a/src/controllers.rs
+++ b/src/controllers.rs
@@ -12,45 +12,39 @@ use std::process::exit;
const SYS_PATHS: [&str; 2] = ["/sys/class/backlight", "/sys/class/leds"];
pub trait Controller {
- fn get_brightness(&self) -> i32;
- fn get_max_brightness(&self) -> i32;
- fn set_brightness(&self, value: i32);
+ fn get_brightness(&self) -> u32;
+ fn get_max_brightness(&self) -> u32;
+ fn set_brightness(&self, value: u32);
- fn check_brightness_value(&self, value: i32) {
- if value > self.get_max_brightness() {
- eprintln!(
- "brightness value too high: {} > {}",
- value,
- self.get_max_brightness()
- );
- exit(exitcode::DATAERR);
- } else if value < 0 {
- eprintln!("brightness value too low: {}", value);
+ fn check_brightness_value(&self, value: u32) {
+ let max = self.get_max_brightness();
+ if value > max {
+ eprintln!("brightness value too high: {value} > {max}",);
exit(exitcode::DATAERR);
}
}
}
pub struct RawController {
- path: Box,
+ path: PathBuf,
}
impl RawController {
- pub fn new(path: Box) -> Self {
+ pub fn new(path: PathBuf) -> Self {
Self { path }
}
}
impl Controller for RawController {
- fn get_brightness(&self) -> i32 {
+ fn get_brightness(&self) -> u32 {
read_file_to_int(self.path.join("brightness"))
}
- fn get_max_brightness(&self) -> i32 {
+ fn get_max_brightness(&self) -> u32 {
read_file_to_int(self.path.join("max_brightness"))
}
- fn set_brightness(&self, value: i32) {
+ fn set_brightness(&self, value: u32) {
self.check_brightness_value(value);
let path = self.path.join("brightness");
@@ -67,8 +61,7 @@ impl Controller for RawController {
Ok(_) => {}
Err(err) => {
eprintln!(
- "could not write '{}' to file '{}': {:?}",
- value,
+ "could not write '{value}' to file '{}': {:?}",
&path.display(),
err.kind()
);
@@ -83,7 +76,7 @@ pub struct LinController {
}
impl LinController {
- pub fn new(path: Box) -> Self {
+ pub fn new(path: PathBuf) -> Self {
Self {
parent_controller: RawController::new(path),
}
@@ -91,23 +84,22 @@ impl LinController {
}
impl Controller for LinController {
- fn get_brightness(&self) -> i32 {
+ fn get_brightness(&self) -> u32 {
((self.parent_controller.get_brightness() as f64
/ self.parent_controller.get_max_brightness() as f64)
- * self.get_max_brightness() as f64) as i32
+ * self.get_max_brightness() as f64) as u32
}
- fn get_max_brightness(&self) -> i32 {
+ fn get_max_brightness(&self) -> u32 {
100
}
- fn set_brightness(&self, value: i32) {
+ fn set_brightness(&self, value: u32) {
self.check_brightness_value(value);
if value > self.get_max_brightness() {
eprintln!(
- "brightness value too high! {} > {}",
- value,
+ "brightness value too high! {value} > {}",
self.get_max_brightness()
);
exit(exitcode::DATAERR);
@@ -124,7 +116,7 @@ pub struct LogController {
}
impl LogController {
- pub fn new(path: Box) -> Self {
+ pub fn new(path: PathBuf) -> Self {
Self {
parent_controller: RawController::new(path),
}
@@ -132,23 +124,22 @@ impl LogController {
}
impl Controller for LogController {
- fn get_brightness(&self) -> i32 {
+ fn get_brightness(&self) -> u32 {
((self.parent_controller.get_brightness() as f64).log10()
/ (self.parent_controller.get_max_brightness() as f64).log10()
- * self.get_max_brightness() as f64) as i32
+ * self.get_max_brightness() as f64) as u32
}
- fn get_max_brightness(&self) -> i32 {
+ fn get_max_brightness(&self) -> u32 {
100
}
- fn set_brightness(&self, value: i32) {
+ fn set_brightness(&self, value: u32) {
self.check_brightness_value(value);
if value > self.get_max_brightness() {
eprintln!(
- "brightness value too high! {} > {}",
- value,
+ "brightness value too high! {value} > {}",
self.get_max_brightness()
);
exit(exitcode::DATAERR);
@@ -157,11 +148,11 @@ impl Controller for LogController {
self.parent_controller.set_brightness(10f64.powf(
(value as f64 / self.get_max_brightness() as f64)
* (self.parent_controller.get_max_brightness() as f64).log10(),
- ) as i32)
+ ) as u32)
}
}
-fn read_file_to_int(path: PathBuf) -> i32 {
+fn read_file_to_int(path: PathBuf) -> u32 {
let mut file = match File::open(&path) {
Err(why) => {
eprintln!("couldn't open {}: {:?}", path.display(), why.kind());
@@ -183,8 +174,8 @@ fn read_file_to_int(path: PathBuf) -> i32 {
/// Searches through all paths in `SYS_PATHS` and creates a `HashMap` with the name and absolute path.
///
/// It returns a `Tuple` of the default backlight name and the `HashMap`.
-pub fn get_controllers() -> (String, HashMap>) {
- let mut controllers: HashMap> = HashMap::new();
+pub fn get_controllers() -> (String, HashMap) {
+ let mut controllers: HashMap = HashMap::new();
let mut default = None;
@@ -198,7 +189,7 @@ pub fn get_controllers() -> (String, HashMap>) {
default = Some(key.clone());
}
- controllers.insert(key, Box::new(name));
+ controllers.insert(key, name);
}
}
}
diff --git a/src/main.rs b/src/main.rs
index 41254d3..0a5613b 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -23,22 +23,22 @@ fn main() {
Some("raw") => Box::new(RawController::new(p)),
Some("lin") => Box::new(LinController::new(p)),
Some("log") => Box::new(LogController::new(p)),
- Some(_) | None => panic!("{}", ERROR_MSG),
+ Some(_) | None => panic!("{ERROR_MSG}"),
};
if matches.is_present("list") {
for ctrl in ctrls.keys() {
- println!("{}", ctrl);
+ println!("{ctrl}");
}
exit(exitcode::OK);
} else if let Some(value) = matches.value_of("set") {
- let new_value = value.parse::().unwrap();
+ let new_value = value.parse::().unwrap();
controller.set_brightness(new_value);
} else if let Some(value) = matches.value_of("inc") {
- let new_value = controller.get_brightness() + value.parse::().unwrap();
+ let new_value = controller.get_brightness() + value.parse::().unwrap();
controller.set_brightness(new_value.min(controller.get_max_brightness()));
} else if let Some(value) = matches.value_of("dec") {
- let new_value = controller.get_brightness() - value.parse::().unwrap();
+ let new_value = controller.get_brightness() - value.parse::().unwrap();
controller.set_brightness(new_value.max(0));
} else if matches.is_present("get") {
println!("{}", controller.get_brightness());