reqrio 0.3.0-rc2

A lightweight, high-performance, fingerprint-based HTTP request library.
Documentation
use std::ffi::CString;
use std::os::raw::c_char;
use std::sync::LazyLock;
use crate::error::HlsResult;
use crate::HlsError;

mod req;
mod wss;

static CONVERT_ERROR: LazyLock<CString> = LazyLock::new(|| unsafe { CString::from_vec_unchecked(b"convert error fail".to_vec()) });

fn handle_err1<T, E: ToString>(e: E, err: *mut *mut c_char, t: T) -> T {
    let ce = CString::new(e.to_string().replace("\0", "")).unwrap_or_else(|_| CONVERT_ERROR.clone());
    unsafe { *err = ce.into_raw(); }
    t
}

fn handle_err2<E: ToString>(e: E) -> *mut c_char {
    let ce = CString::new(e.to_string().replace("\0", "")).unwrap_or_else(|_| CONVERT_ERROR.clone());
    ce.into_raw()
}

fn check_run<T>(mut func: impl FnMut() -> HlsResult<T>, handle: impl Fn(HlsError) -> T) -> T {
    func().unwrap_or_else(handle)
}