1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#[cfg(target_os = "windows")]
mod handlers;
mod providers;
#[cfg(target_os = "windows")]
mod stubs;

use crate::platforms::WifiError;
use std::{fmt, io};

/// Wireless network connectivity functionality.
pub trait Connectivity: fmt::Debug {
    /// Makes an attempt to connect to a selected wireless network with password specified.
    fn connect(&mut self, ssid: &str, password: &str) -> Result<bool, WifiConnectionError>;

    /// Disconnects from a wireless network currently connected to.
    fn disconnect(&self) -> Result<bool, WifiConnectionError>;
}

/// Error that occurs when attempting to connect to a wireless network.
#[derive(Debug)]
pub enum WifiConnectionError {
    /// Adding the newtork profile failed.
    #[cfg(target_os = "windows")]
    AddNetworkProfileFailed,
    /// Failed to connect to wireless network.
    FailedToConnect(String),
    /// Failed to disconnect from wireless network. Try turning the wireless interface down.
    FailedToDisconnect(String),
    /// A wireless error occurred.
    Other { kind: WifiError },
    // SsidNotFound,
}

impl From<io::Error> for WifiConnectionError {
    fn from(error: io::Error) -> Self {
        WifiConnectionError::Other {
            kind: WifiError::IoError(error),
        }
    }
}