Connector::connect already used &self, and so would require synchronization to be handled per connector anyway. Adding Sync to the Client allows users to setup config for a Client once, such as using a single connection Pool, and then making requests across multiple threads. Closes #254 BREAKING CHANGE: Connectors and Protocols passed to the `Client` must now also have a `Sync` bounds, but this shouldn't break default usage.
		
			
				
	
	
		
			35 lines
		
	
	
		
			779 B
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			35 lines
		
	
	
		
			779 B
		
	
	
	
		
			Rust
		
	
	
	
	
	
| #![deny(warnings)]
 | |
| extern crate hyper;
 | |
| 
 | |
| extern crate env_logger;
 | |
| 
 | |
| use std::env;
 | |
| use std::io;
 | |
| 
 | |
| use hyper::Client;
 | |
| use hyper::header::Connection;
 | |
| use hyper::http::h2;
 | |
| 
 | |
| fn main() {
 | |
|     env_logger::init().unwrap();
 | |
| 
 | |
|     let url = match env::args().nth(1) {
 | |
|         Some(url) => url,
 | |
|         None => {
 | |
|             println!("Usage: client <url>");
 | |
|             return;
 | |
|         }
 | |
|     };
 | |
| 
 | |
|     let client = Client::with_protocol(h2::new_protocol());
 | |
| 
 | |
|     // `Connection: Close` is not a valid header for HTTP/2, but the client handles it gracefully.
 | |
|     let mut res = client.get(&*url)
 | |
|         .header(Connection::close())
 | |
|         .send().unwrap();
 | |
| 
 | |
|     println!("Response: {}", res.status);
 | |
|     println!("Headers:\n{}", res.headers);
 | |
|     io::copy(&mut res, &mut io::stdout()).unwrap();
 | |
| }
 |