電源ケーブルの接続状態を検知する

Recipe ID: hw-017

AC 電源が接続されているかどうかを判定します。重い処理(バックグラウンド同期やアップデート)をバッテリー駆動時に避けるなどの用途に使えます。

実装 (Battery クレート)

hw-016 と同じく battery クレートを使用し、ステータスを確認します。
use battery::Manager;
use battery::State;

#[tauri::command]
fn is_ac_connected() -> bool {
    // 取得失敗時は安全側に倒して true (接続扱い) とするか、エラーを返すか検討が必要
    let manager = match Manager::new() {
        Ok(m) => m,
        Err(_) => return true, 
    };

    for maybe_battery in manager.batteries().unwrap() {
        if let Ok(battery) = maybe_battery {
            match battery.state() {
                State::Charging | State::Full => return true,
                State::Discharging | State::Empty => return false,
                State::Unknown => {}, // デスクトップPCなどの場合
                _ => {},
            }
        }
    }

    // バッテリーが見つからない場合はデスクトップPC(AC電源常時接続)とみなす
    true
}

注意: 一部のデバイスでは State::Unknown が返る場合があるため、運用上は「バッテリーが減っている状態 (Discharging) のみ AC 未接続」と判定するのが安全です。