src/client/http_client.rs: implement http2 client wrapper

This commit is contained in:
Dietmar Maurer
2019-05-13 10:27:22 +02:00
parent 9e391bb7f0
commit b57cb26406
2 changed files with 113 additions and 45 deletions

View File

@ -1,47 +1,9 @@
use failure::*;
use futures::*;
use serde_json::{json, Value};
use serde_json::json;
use proxmox_backup::client::*;
fn get(mut h2: h2::client::SendRequest<bytes::Bytes>, path: &str) -> impl Future<Item=Value, Error=Error> {
let request = http::Request::builder()
.method("GET")
.uri(format!("https://localhost/{}", path))
.header(hyper::header::CONTENT_TYPE, "application/x-www-form-urlencoded")
.body(()).unwrap();
println!("SEND GET {} REQUEST", path);
let (response, _stream) = h2.send_request(request, true).unwrap();
response
.map_err(Error::from)
.and_then(|response| {
let (head, mut body) = response.into_parts();
println!("Received response: {:?}", head);
// The `release_capacity` handle allows the caller to manage
// flow control.
//
// Whenever data is received, the caller is responsible for
// releasing capacity back to the server once it has freed
// the data from memory.
let mut release_capacity = body.release_capacity().clone();
body
.concat2()
.map_err(Error::from)
.and_then(move |data| {
println!("RX: {:?}", data);
// fixme:
Ok(Value::Null)
})
}).map_err(Error::from)
}
fn run() -> Result<(), Error> {
let host = "localhost";
@ -51,13 +13,13 @@ fn run() -> Result<(), Error> {
let mut client = HttpClient::new(host, username)?;
let param = json!({"backup-type": "host", "backup-id": "test" });
let h2client = client.h2upgrade("/api2/json/admin/datastore/store2/backup", Some(param));
let upgrade = client.h2upgrade("/api2/json/admin/datastore/store2/backup", Some(param));
let res = h2client.and_then(|mut h2| {
let res = upgrade.and_then(|send_request| {
println!("start http2");
let result1 = get(h2.clone(), "test1");
let result2 = get(h2.clone(), "test2");
let h2 = H2Client::new(send_request);
let result1 = h2.get("test1", None);
let result2 = h2.get("test2", None);
result1.join(result2)
}).wait()?;