corewlan 0.2.0

Safe Rust bindings for Apple's CoreWLAN framework — inspect Wi-Fi interfaces, mutable configurations, event delegates, and preferred network state on macOS
Documentation
#![allow(dead_code)]

use corewlan::{Channel, Interface, Network, WiFiClient};
use std::sync::{Mutex, MutexGuard, OnceLock};

pub fn default_interface() -> Option<Interface> {
    WiFiClient::shared().ok().and_then(|client| client.interface())
}

pub fn first_channel() -> Option<Channel> {
    default_interface().and_then(|interface| {
        interface
            .wlan_channel()
            .or_else(|| interface.supported_wlan_channels().into_iter().next())
    })
}

pub fn first_network() -> Option<Network> {
    default_interface().and_then(|interface| interface.cached_scan_results().into_iter().next())
}

pub fn corewlan_test_lock() -> MutexGuard<'static, ()> {
    static LOCK: OnceLock<Mutex<()>> = OnceLock::new();
    LOCK.get_or_init(|| Mutex::new(())).lock().expect("test lock poisoned")
}