client_net.rs 1.0 KB

123456789101112131415161718192021222324252627282930313233343536
  1. // This file provides networking using hyper (which
  2. // https://gitlab.torproject.org/onyinyang/lox-server uses).
  3. use crate::client_lib::Networking;
  4. use async_trait::async_trait;
  5. use hyper::{Body, Client, Method, Request};
  6. pub struct HyperNet {
  7. pub hostname: String,
  8. }
  9. #[async_trait]
  10. impl Networking for HyperNet {
  11. async fn request(&self, endpoint: String, body: Vec<u8>) -> Vec<u8> {
  12. let client = Client::new();
  13. let url = self.hostname.to_string() + &endpoint;
  14. let uri: hyper::Uri = url.parse().expect("Failed to parse URL");
  15. // always POST even if body is empty
  16. let req = Request::builder()
  17. .method(Method::POST)
  18. .uri(uri)
  19. .body(Body::from(body))
  20. .expect("Failed to create POST request");
  21. let resp = client.request(req).await.expect("Failed to POST");
  22. println!("Response: {}", resp.status());
  23. let buf = hyper::body::to_bytes(resp)
  24. .await
  25. .expect("Failed to concat bytes");
  26. buf.to_vec()
  27. }
  28. }