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 friendly_device_name(&self) -> Result<String, Error>;
31
32 fn get(&self) -> Result<u32, Error>;
34
35 fn set(&self, percentage: u32) -> Result<(), Error>;
37}
38
39impl Brightness for BrightnessDevice {
40 fn device_name(&self) -> Result<String, Error> {
41 self.0.device_name()
42 }
43
44 fn friendly_device_name(&self) -> Result<String, Error> {
45 self.0.friendly_device_name()
46 }
47
48 fn get(&self) -> Result<u32, Error> {
49 self.0.get()
50 }
51
52 fn set(&self, percentage: u32) -> Result<(), Error> {
53 self.0.set(percentage)
54 }
55}
56
57pub fn brightness_devices() -> impl Iterator<Item = Result<BrightnessDevice, Error>> {
59 platform::brightness_devices().map(|r| r.map(BrightnessDevice).map_err(Into::into))
60}