scanlink 0.1.1

Scan QR payloads and use parsed connection data with pluggable network backends.
Documentation
use std::io;

use nokhwa::{
    pixel_format::LumaFormat,
    utils::{ CameraIndex, RequestedFormat, RequestedFormatType },
};

use scanlink::{
    build_qr_scanner,
    connect_to_wifi_from_qr_payloads,
    save_camera_preview,
    scan_qr_payloads_from_camera,
    setup_camera,
    LinuxNetworkManagerConnector,
};
fn main() {
    let mut user_input = String::new();

    let index = CameraIndex::Index(0);

    let requested = RequestedFormat::new::<LumaFormat>(
        RequestedFormatType::AbsoluteHighestFrameRate
    );

    let mut camera = setup_camera(index, requested);

    let mut scanner = build_qr_scanner();

    loop {
        user_input.clear();

        println!("Type command: p = preview, c = capture, q = quit");

        io::stdin().read_line(&mut user_input).expect("failed to read input");

        let command = user_input.trim().to_lowercase();

        if command == "q" {
            println!("Thank you for using this service. Good bye.");
            break;
        } else if command == "p" {
            save_camera_preview(&mut camera);
        } else if command == "c" {
            let qr_payloads = scan_qr_payloads_from_camera(&mut camera, &mut scanner);

            println!("QR payload detected.");

            let connector = LinuxNetworkManagerConnector;
            let result = connect_to_wifi_from_qr_payloads(&qr_payloads, &connector);

            match result {
                Ok(()) => {
                    println!("Connected to Wi-Fi successfully.");
                }

                Err(error) => {
                    println!("Failed to connect to Wi-Fi: {:?}", error);
                }
            }
        } else {
            println!("Unknown command.");
        }
    }
}