1use crate::Error;
6
7cfg_if::cfg_if! {
8 if #[cfg(target_os = "linux")] {
9 pub(crate) mod linux;
10 use self::linux as platform;
11 } else if #[cfg(windows)] {
12 pub mod windows;
13 use self::windows as platform;
14 } else {
15 compile_error!("unsupported platform");
16 }
17}
18
19#[derive(Debug)]
21pub struct BrightnessDevice(platform::BlockingDeviceImpl);
22
23pub trait Brightness {
25 fn device_name(&self) -> Result<String, Error>;
27
28 fn get(&self) -> Result<u32, Error>;
30
31 fn set(&self, percentage: u32) -> Result<(), Error>;
33}
34
35impl Brightness for BrightnessDevice {
36 fn device_name(&self) -> Result<String, Error> {
37 self.0.device_name()
38 }
39
40 fn get(&self) -> Result<u32, Error> {
41 self.0.get()
42 }
43
44 fn set(&self, percentage: u32) -> Result<(), Error> {
45 self.0.set(percentage)
46 }
47}
48
49pub fn brightness_devices() -> impl Iterator<Item = Result<BrightnessDevice, Error>> {
51 platform::brightness_devices().map(|r| r.map(BrightnessDevice).map_err(Into::into))
52}