1use serde::Deserialize;
2use std::str::FromStr;
3use url::Url;
4
5#[derive(Debug, Deserialize)]
6#[allow(non_snake_case)]
7#[allow(dead_code)]
8pub struct ToDo {
9 userId: u32,
10 id: u32,
11 title: String,
12 completed: bool,
13}
14
15#[allow(dead_code)]
16#[derive(Debug)]
17pub struct Request<'req> {
18 pub protocol: &'req str,
19 pub host: &'req str,
20 pub path: &'req str,
21 pub query: &'req str,
22}
23
24impl Request<'_> {
25 pub fn create_url(&self) -> Url {
26 let request: Request = Request {
27 protocol: self.protocol,
28 host: self.host,
29 path: self.path,
30 query: self.query,
31 };
32
33 println!("{request:#?}");
34
35 let url = Url::from_str(
36 format!(
37 "{}://{}{}{}",
38 request.protocol, request.host, request.path, request.query
39 )
40 .as_str(),
41 )
42 .unwrap();
43 url
44 }
45
46 pub async fn create_request(url: &str) {
47 let result: Result<ToDo, _> = reqwest::get(Url::parse(url).unwrap())
48 .await
49 .unwrap()
50 .json()
51 .await;
52 println!("{result:#?}");
53 }
54}