wayle-battery 0.1.0

Battery monitoring service with reactive state
Documentation

Battery monitoring via UPower D-Bus interface.

Quick Start

use wayle_battery::BatteryService;

# async fn example() -> Result<(), wayle_battery::Error> {
let service = BatteryService::new().await?;

// Access battery state
let percentage = service.device.percentage.get();
let state = service.device.state.get();

println!("Battery: {percentage}% ({state})");
# Ok(())
# }

Reactive Properties

All device properties are wrapped in Property<T>:

  • Snapshot: .get() returns the current value
  • Stream: .watch() yields on every change
# use wayle_battery::BatteryService;
# use futures::StreamExt;
# async fn example() -> Result<(), wayle_battery::Error> {
# let service = BatteryService::new().await?;
// React to state changes
let mut state_stream = service.device.state.watch();
while let Some(new_state) = state_stream.next().await {
    println!("State changed: {new_state}");
}
# Ok(())
# }

DisplayDevice vs Specific Devices

By default, [BatteryService::new] monitors UPower's DisplayDevice - a composite that aggregates all batteries. For specific device monitoring:

# use wayle_battery::BatteryService;
use zbus::zvariant::OwnedObjectPath;

# async fn example() -> Result<(), wayle_battery::Error> {
let path = OwnedObjectPath::try_from("/org/freedesktop/UPower/devices/battery_BAT0")?;
let service = BatteryService::builder()
    .device_path(path)
    .build()
    .await?;
# Ok(())
# }

Control Methods

The Device type exposes UPower operations: