kael 0.2.0

GPU-accelerated native UI framework for Rust — build desktop apps with Metal, DirectX, and Vulkan rendering
Documentation
use crate::{BiometricKind, BiometricStatus};
use windows::{
    Security::Credentials::UI::{
        UserConsentVerificationResult, UserConsentVerifier, UserConsentVerifierAvailability,
    },
    core::HSTRING,
};

pub fn biometric_status() -> BiometricStatus {
    let availability = match UserConsentVerifier::CheckAvailabilityAsync()
        .and_then(super::util::block_on_operation)
    {
        Ok(availability) => availability,
        Err(_) => return BiometricStatus::Unavailable,
    };

    if availability == UserConsentVerifierAvailability::Available {
        BiometricStatus::Available(BiometricKind::WindowsHello)
    } else {
        BiometricStatus::Unavailable
    }
}

pub fn authenticate_biometric(reason: &str, callback: Box<dyn FnOnce(bool) + Send>) {
    let message = HSTRING::from(reason);
    let result = UserConsentVerifier::RequestVerificationAsync(&message)
        .and_then(super::util::block_on_operation);

    match result {
        Ok(verification_result) => {
            callback(verification_result == UserConsentVerificationResult::Verified);
        }
        Err(_) => {
            callback(false);
        }
    }
}