mirror of
https://github.com/yuzu-emu/liftinstall.git
synced 2025-03-06 09:19:48 +00:00
49 lines
1 KiB
Rust
49 lines
1 KiB
Rust
//! http.rs
|
|
//!
|
|
//! A simple wrapper around Hyper's HTTP client.
|
|
|
|
use hyper::header::ContentLength;
|
|
|
|
use reqwest;
|
|
|
|
use std::io::Read;
|
|
|
|
/// Streams a file from a HTTP server.
|
|
pub fn stream_file<F>(url: String, mut callback: F) -> Result<(), String>
|
|
where
|
|
F: FnMut(Vec<u8>, u64) -> (),
|
|
{
|
|
let mut client = match reqwest::get(&url) {
|
|
Ok(v) => v,
|
|
Err(v) => return Err(format!("Failed to GET resource: {:?}", v)),
|
|
};
|
|
|
|
let size = {
|
|
let size: Option<&ContentLength> = client.headers().get();
|
|
match size {
|
|
Some(&ContentLength(v)) => v,
|
|
None => 0,
|
|
}
|
|
};
|
|
|
|
let mut buf = [0 as u8; 8192];
|
|
loop {
|
|
let len = client.read(&mut buf);
|
|
let len = match len {
|
|
Ok(v) => v,
|
|
Err(v) => return Err(format!("Failed to read resource: {:?}", v)),
|
|
};
|
|
|
|
if len == 0 {
|
|
break;
|
|
}
|
|
|
|
let buf_copy = &buf[0..len];
|
|
let buf_copy = buf_copy.to_vec();
|
|
|
|
callback(buf_copy, size);
|
|
}
|
|
|
|
Ok(())
|
|
}
|