nyquest-backend-winrt 0.4.0

Windows.Web.Http.HttpClient backend for nyquest
Documentation
use nyquest_interface::Result as NyquestResult;
use windows::Storage::Streams::IBuffer;
use windows::Win32::System::WinRT::IBufferByteAccess;
use windows_core::Interface;

use crate::error::IntoNyquestResult;

pub(crate) trait IBufferExt {
    fn to_vec(&self) -> NyquestResult<Vec<u8>>;
}

impl IBufferExt for IBuffer {
    fn to_vec(&self) -> NyquestResult<Vec<u8>> {
        let len = self.Length().into_nyquest_result()? as usize;
        let iba = self.cast::<IBufferByteAccess>().into_nyquest_result()?;
        let arr = unsafe {
            let ptr = iba.Buffer().into_nyquest_result()?;
            std::slice::from_raw_parts(ptr, len).to_vec()
        };
        Ok(arr)
    }
}