Rust crate providing cross-platform information about the notebook batteries.
- Overview
- Supported platforms
- Install
- Examples
- FFI bindings
- Users
- License
- Donations
- Contributors
- Backers
- Sponsors
battery
provides a cross-platform unified API to a notebook batteries state.
Its main goal is to wrap the OS-specific interfaces, cover all the hacks and legacy cases and get the batteries information (such as state of charge, energy rate, voltage and temperature) as a typed values, recalculated as necessary to be returned as a SI measurement units.
- Linux 2.6.39+
- MacOS 10.10+
- iOS
- Windows 7+
- FreeBSD
- DragonFlyBSD
Do note that iOS implementation uses IOKit bindings, your application might be automatically rejected by Apple based on that fact. Use it on your own risk.
As a prerequisite, battery
crate requires at least Rustc version 1.46 or greater.
Add the following line into a Cargo.toml
:
[dependencies]
battery = "0.7.8"
fn main() -> Result<(), battery::Error> {
let manager = battery::Manager::new()?;
for (idx, maybe_battery) in manager.batteries()?.enumerate() {
let battery = maybe_battery?;
println!("Battery #{}:", idx);
println!("Vendor: {:?}", battery.vendor());
println!("Model: {:?}", battery.model());
println!("State: {:?}", battery.state());
println!("Time to full charge: {:?}", battery.time_to_full());
println!("");
}
Ok(())
}
See the battery/examples/
folder in the repository
for additional examples.
Experimental battery-ffi crate provides the FFI bindings to the battery
crate,
so it can be used with other languages, such as C, Python or NodeJS.
Check its README and documentation for details.
This an incomplete list of the battery
crate users. If you are using it too,
send me a message and I'll add your project here!
starship
is a Rust port of the minimalistic, powerful,
and extremely customizable prompt Spaceship ZSH.
It is using the battery
crate to show the the current battery level and status in a shell prompt.
Here is what @matchai says:
I really appreciate how easily we were able to get your library up and running! Battery APIs were a headache for us in predecessors of this project 😅
And there is this tweet also!