use super::credentials::WifiCredentials;
use super::parser::parse_wifi_credentials;
#[derive(Debug)]
pub enum WifiConnectError {
MissingPassword,
UnsupportedSecurity,
CommandFailed(String),
Io(std::io::Error),
NoCredentialsFound,
}
pub trait WifiConnector {
fn connect(&self, credentials: &WifiCredentials) -> Result<(), WifiConnectError>;
}
impl From<std::io::Error> for WifiConnectError {
fn from(error: std::io::Error) -> Self {
WifiConnectError::Io(error)
}
}
pub fn connect_to_wifi_from_qr_payloads(
qr_payloads: &[String],
connector: &impl WifiConnector
) -> Result<(), WifiConnectError> {
let credentials = parse_wifi_credentials(qr_payloads).ok_or(
WifiConnectError::NoCredentialsFound
)?;
connector.connect(&credentials)
}