alhc 0.2.2

Async Lightweight HTTP Client: A async http client library that using system library to reduce binary size if possible. (Currently under heavy development)
Documentation
use std::io::ErrorKind;

use windows_sys::Win32::{
    Foundation::{GetLastError, WIN32_ERROR},
    Networking::WinHttp::*,
};

pub fn resolve_io_error_from_error_code<T>(code: WIN32_ERROR) -> std::io::Result<T> {
    match code {
        ERROR_WINHTTP_AUTODETECTION_FAILED => Err(std::io::Error::new(
            ErrorKind::Other,
            "ERROR_WINHTTP_AUTODETECTION_FAILED: 12180",
        )),
        ERROR_WINHTTP_AUTO_PROXY_SERVICE_ERROR => Err(std::io::Error::new(
            ErrorKind::Other,
            "ERROR_WINHTTP_AUTO_PROXY_SERVICE_ERROR: 12178",
        )),
        ERROR_WINHTTP_BAD_AUTO_PROXY_SCRIPT => Err(std::io::Error::new(
            ErrorKind::Other,
            "ERROR_WINHTTP_BAD_AUTO_PROXY_SCRIPT: 12166",
        )),
        ERROR_WINHTTP_CANNOT_CALL_AFTER_OPEN => Err(std::io::Error::new(
            ErrorKind::Other,
            "ERROR_WINHTTP_CANNOT_CALL_AFTER_OPEN: 12103",
        )),
        ERROR_WINHTTP_CANNOT_CALL_AFTER_SEND => Err(std::io::Error::new(
            ErrorKind::Other,
            "ERROR_WINHTTP_CANNOT_CALL_AFTER_SEND: 12102",
        )),
        ERROR_WINHTTP_CANNOT_CALL_BEFORE_OPEN => Err(std::io::Error::new(
            ErrorKind::Other,
            "ERROR_WINHTTP_CANNOT_CALL_BEFORE_OPEN: 12100",
        )),
        ERROR_WINHTTP_CANNOT_CALL_BEFORE_SEND => Err(std::io::Error::new(
            ErrorKind::Other,
            "ERROR_WINHTTP_CANNOT_CALL_BEFORE_SEND: 12101",
        )),
        ERROR_WINHTTP_CANNOT_CONNECT => Err(std::io::Error::new(
            ErrorKind::NotConnected,
            "ERROR_WINHTTP_CANNOT_CONNECT: 12029",
        )),
        ERROR_WINHTTP_CHUNKED_ENCODING_HEADER_SIZE_OVERFLOW => Err(std::io::Error::new(
            ErrorKind::OutOfMemory,
            "ERROR_WINHTTP_CHUNKED_ENCODING_HEADER_SIZE_OVERFLOW: 12183",
        )),
        ERROR_WINHTTP_CLIENT_AUTH_CERT_NEEDED => Err(std::io::Error::new(
            ErrorKind::Other,
            "ERROR_WINHTTP_CLIENT_AUTH_CERT_NEEDED: 12044",
        )),
        ERROR_WINHTTP_CLIENT_AUTH_CERT_NEEDED_PROXY => Err(std::io::Error::new(
            ErrorKind::Other,
            "ERROR_WINHTTP_CLIENT_AUTH_CERT_NEEDED_PROXY: 12187",
        )),
        ERROR_WINHTTP_CLIENT_CERT_NO_ACCESS_PRIVATE_KEY => Err(std::io::Error::new(
            ErrorKind::Other,
            "ERROR_WINHTTP_CLIENT_CERT_NO_ACCESS_PRIVATE_KEY: 12186",
        )),
        ERROR_WINHTTP_CLIENT_CERT_NO_PRIVATE_KEY => Err(std::io::Error::new(
            ErrorKind::Other,
            "ERROR_WINHTTP_CLIENT_CERT_NO_PRIVATE_KEY: 12185",
        )),
        ERROR_WINHTTP_CONNECTION_ERROR => Err(std::io::Error::new(
            ErrorKind::ConnectionAborted,
            "ERROR_WINHTTP_CONNECTION_ERROR: 12030",
        )),
        ERROR_WINHTTP_FEATURE_DISABLED => Err(std::io::Error::new(
            ErrorKind::Other,
            "ERROR_WINHTTP_FEATURE_DISABLED: 12192",
        )),
        ERROR_WINHTTP_GLOBAL_CALLBACK_FAILED => Err(std::io::Error::new(
            ErrorKind::Other,
            "ERROR_WINHTTP_GLOBAL_CALLBACK_FAILED: 12191",
        )),
        ERROR_WINHTTP_HEADER_ALREADY_EXISTS => Err(std::io::Error::new(
            ErrorKind::Other,
            "ERROR_WINHTTP_HEADER_ALREADY_EXISTS: 12155",
        )),
        ERROR_WINHTTP_HEADER_COUNT_EXCEEDED => Err(std::io::Error::new(
            ErrorKind::Other,
            "ERROR_WINHTTP_HEADER_COUNT_EXCEEDED: 12181",
        )),
        ERROR_WINHTTP_HEADER_NOT_FOUND => Err(std::io::Error::new(
            ErrorKind::NotFound,
            "ERROR_WINHTTP_HEADER_NOT_FOUND: 12150",
        )),
        ERROR_WINHTTP_HEADER_SIZE_OVERFLOW => Err(std::io::Error::new(
            ErrorKind::OutOfMemory,
            "ERROR_WINHTTP_HEADER_SIZE_OVERFLOW: 12182",
        )),
        ERROR_WINHTTP_HTTP_PROTOCOL_MISMATCH => Err(std::io::Error::new(
            ErrorKind::Other,
            "ERROR_WINHTTP_HTTP_PROTOCOL_MISMATCH: 12190",
        )),
        ERROR_WINHTTP_INCORRECT_HANDLE_STATE => Err(std::io::Error::new(
            ErrorKind::Other,
            "ERROR_WINHTTP_INCORRECT_HANDLE_STATE: 12019",
        )),
        ERROR_WINHTTP_INCORRECT_HANDLE_TYPE => Err(std::io::Error::new(
            ErrorKind::Other,
            "ERROR_WINHTTP_INCORRECT_HANDLE_TYPE: 12018",
        )),
        ERROR_WINHTTP_INTERNAL_ERROR => Err(std::io::Error::new(
            ErrorKind::Other,
            "ERROR_WINHTTP_INTERNAL_ERROR: 12004",
        )),
        ERROR_WINHTTP_INVALID_HEADER => Err(std::io::Error::new(
            ErrorKind::InvalidData,
            "ERROR_WINHTTP_INVALID_HEADER: 12153",
        )),
        ERROR_WINHTTP_INVALID_OPTION => Err(std::io::Error::new(
            ErrorKind::InvalidInput,
            "ERROR_WINHTTP_INVALID_OPTION: 12009",
        )),
        ERROR_WINHTTP_INVALID_QUERY_REQUEST => Err(std::io::Error::new(
            ErrorKind::Other,
            "ERROR_WINHTTP_INVALID_QUERY_REQUEST: 12154",
        )),
        ERROR_WINHTTP_INVALID_SERVER_RESPONSE => Err(std::io::Error::new(
            ErrorKind::Other,
            "ERROR_WINHTTP_INVALID_SERVER_RESPONSE: 12152",
        )),
        ERROR_WINHTTP_INVALID_URL => Err(std::io::Error::new(
            ErrorKind::InvalidInput,
            "ERROR_WINHTTP_INVALID_URL: 12005",
        )),
        ERROR_WINHTTP_LOGIN_FAILURE => Err(std::io::Error::new(
            ErrorKind::Other,
            "ERROR_WINHTTP_LOGIN_FAILURE: 12015",
        )),
        ERROR_WINHTTP_NAME_NOT_RESOLVED => Err(std::io::Error::new(
            ErrorKind::Other,
            "ERROR_WINHTTP_NAME_NOT_RESOLVED: 12007",
        )),
        ERROR_WINHTTP_NOT_INITIALIZED => Err(std::io::Error::new(
            ErrorKind::Other,
            "ERROR_WINHTTP_NOT_INITIALIZED: 12172",
        )),
        ERROR_WINHTTP_OPERATION_CANCELLED => Err(std::io::Error::new(
            ErrorKind::Other,
            "ERROR_WINHTTP_OPERATION_CANCELLED: 12017",
        )),
        ERROR_WINHTTP_OPTION_NOT_SETTABLE => Err(std::io::Error::new(
            ErrorKind::Other,
            "ERROR_WINHTTP_OPTION_NOT_SETTABLE: 12011",
        )),
        ERROR_WINHTTP_OUT_OF_HANDLES => Err(std::io::Error::new(
            ErrorKind::Other,
            "ERROR_WINHTTP_OUT_OF_HANDLES: 12001",
        )),
        ERROR_WINHTTP_REDIRECT_FAILED => Err(std::io::Error::new(
            ErrorKind::Other,
            "ERROR_WINHTTP_REDIRECT_FAILED: 12156",
        )),
        ERROR_WINHTTP_RESEND_REQUEST => Err(std::io::Error::new(
            ErrorKind::Other,
            "ERROR_WINHTTP_RESEND_REQUEST: 12032",
        )),
        ERROR_WINHTTP_RESERVED_189 => Err(std::io::Error::new(
            ErrorKind::Other,
            "ERROR_WINHTTP_RESERVED_189: 12189",
        )),
        ERROR_WINHTTP_RESPONSE_DRAIN_OVERFLOW => Err(std::io::Error::new(
            ErrorKind::OutOfMemory,
            "ERROR_WINHTTP_RESPONSE_DRAIN_OVERFLOW: 12184",
        )),
        ERROR_WINHTTP_SCRIPT_EXECUTION_ERROR => Err(std::io::Error::new(
            ErrorKind::Other,
            "ERROR_WINHTTP_SCRIPT_EXECUTION_ERROR: 12177",
        )),
        ERROR_WINHTTP_SECURE_CERT_CN_INVALID => Err(std::io::Error::new(
            ErrorKind::Other,
            "ERROR_WINHTTP_SECURE_CERT_CN_INVALID: 12038",
        )),
        ERROR_WINHTTP_SECURE_CERT_DATE_INVALID => Err(std::io::Error::new(
            ErrorKind::Other,
            "ERROR_WINHTTP_SECURE_CERT_DATE_INVALID: 12037",
        )),
        ERROR_WINHTTP_SECURE_CERT_REVOKED => Err(std::io::Error::new(
            ErrorKind::Other,
            "ERROR_WINHTTP_SECURE_CERT_REVOKED: 12170",
        )),
        ERROR_WINHTTP_SECURE_CERT_REV_FAILED => Err(std::io::Error::new(
            ErrorKind::Other,
            "ERROR_WINHTTP_SECURE_CERT_REV_FAILED: 12057",
        )),
        ERROR_WINHTTP_SECURE_CERT_WRONG_USAGE => Err(std::io::Error::new(
            ErrorKind::Other,
            "ERROR_WINHTTP_SECURE_CERT_WRONG_USAGE: 12179",
        )),
        ERROR_WINHTTP_SECURE_CHANNEL_ERROR => Err(std::io::Error::new(
            ErrorKind::Other,
            "ERROR_WINHTTP_SECURE_CHANNEL_ERROR: 12157",
        )),
        ERROR_WINHTTP_SECURE_FAILURE => Err(std::io::Error::new(
            ErrorKind::Other,
            "ERROR_WINHTTP_SECURE_FAILURE: 12175",
        )),
        ERROR_WINHTTP_SECURE_FAILURE_PROXY => Err(std::io::Error::new(
            ErrorKind::Other,
            "ERROR_WINHTTP_SECURE_FAILURE_PROXY: 12188",
        )),
        ERROR_WINHTTP_SECURE_INVALID_CA => Err(std::io::Error::new(
            ErrorKind::Other,
            "ERROR_WINHTTP_SECURE_INVALID_CA: 12045",
        )),
        ERROR_WINHTTP_SECURE_INVALID_CERT => Err(std::io::Error::new(
            ErrorKind::Other,
            "ERROR_WINHTTP_SECURE_INVALID_CERT: 12169",
        )),
        ERROR_WINHTTP_SHUTDOWN => Err(std::io::Error::new(
            ErrorKind::Other,
            "ERROR_WINHTTP_SHUTDOWN: 12012",
        )),
        ERROR_WINHTTP_TIMEOUT => Err(std::io::Error::new(
            ErrorKind::TimedOut,
            "ERROR_WINHTTP_TIMEOUT: 12002",
        )),
        ERROR_WINHTTP_UNABLE_TO_DOWNLOAD_SCRIPT => Err(std::io::Error::new(
            ErrorKind::Other,
            "ERROR_WINHTTP_UNABLE_TO_DOWNLOAD_SCRIPT: 12167",
        )),
        ERROR_WINHTTP_UNHANDLED_SCRIPT_TYPE => Err(std::io::Error::new(
            ErrorKind::Other,
            "ERROR_WINHTTP_UNHANDLED_SCRIPT_TYPE: 12176",
        )),
        ERROR_WINHTTP_UNRECOGNIZED_SCHEME => Err(std::io::Error::new(
            ErrorKind::Other,
            "ERROR_WINHTTP_UNRECOGNIZED_SCHEME: 12006",
        )),

        other => Err(std::io::Error::from_raw_os_error(other as _)),
    }
}

pub fn resolve_io_error<T>() -> std::io::Result<T> {
    resolve_io_error_from_error_code(unsafe { GetLastError() })
}