1use reqwest::Url;
7
8use crate::{
9 get_json,
10 wrapper::{
11 ContainsCategories, ContainsGames, ContainsPBs, ContainsRunner, ContainsRunners,
12 ContainsRuns,
13 },
14 Category, Client, Error, Game, Run, Runner,
15};
16
17impl Runner {
18 pub async fn search(client: &Client, name: &str) -> Result<Vec<Runner>, Error> {
20 self::search(client, name).await
21 }
22
23 pub async fn myself(client: &Client) -> Result<Runner, Error> {
25 self::myself(client).await
26 }
27
28 pub async fn get(client: &Client, name: &str) -> Result<Runner, Error> {
30 self::get(client, name).await
31 }
32
33 pub async fn runs(&self, client: &Client) -> Result<Vec<Run>, Error> {
35 get_runs(client, &self.name).await
36 }
37
38 pub async fn pbs(&self, client: &Client) -> Result<Vec<Run>, Error> {
40 get_pbs(client, &self.name).await
41 }
42
43 pub async fn games(&self, client: &Client) -> Result<Vec<Game>, Error> {
45 get_games(client, &self.name).await
46 }
47
48 pub async fn categories(&self, client: &Client) -> Result<Vec<Category>, Error> {
50 get_categories(client, &self.name).await
51 }
52}
53
54pub async fn search(client: &Client, name: &str) -> Result<Vec<Runner>, Error> {
56 let mut url = Url::parse("https://splits.io/api/v4/runners").unwrap();
57 url.query_pairs_mut().append_pair("search", name);
58
59 let ContainsRunners { runners } = get_json(client, client.client.get(url)).await?;
60
61 Ok(runners)
62}
63
64pub async fn myself(client: &Client) -> Result<Runner, Error> {
66 let ContainsRunner { runner } =
67 get_json(client, client.client.get("https://splits.io/api/v4/runner")).await?;
68
69 Ok(runner)
70}
71
72pub async fn get(client: &Client, name: &str) -> Result<Runner, Error> {
74 let mut url = Url::parse("https://splits.io/api/v4/runners").unwrap();
75 url.path_segments_mut().unwrap().push(name);
76
77 let ContainsRunner { runner } = get_json(client, client.client.get(url)).await?;
78
79 Ok(runner)
80}
81
82pub async fn get_runs(client: &Client, name: &str) -> Result<Vec<Run>, Error> {
84 let mut url = Url::parse("https://splits.io/api/v4/runners").unwrap();
85 url.path_segments_mut().unwrap().extend(&[name, "runs"]);
86
87 let ContainsRuns { runs } = get_json(client, client.client.get(url)).await?;
88
89 Ok(runs)
90}
91
92pub async fn get_pbs(client: &Client, name: &str) -> Result<Vec<Run>, Error> {
94 let mut url = Url::parse("https://splits.io/api/v4/runners").unwrap();
95 url.path_segments_mut().unwrap().extend(&[name, "pbs"]);
96
97 let ContainsPBs { pbs } = get_json(client, client.client.get(url)).await?;
98
99 Ok(pbs)
100}
101
102pub async fn get_games(client: &Client, name: &str) -> Result<Vec<Game>, Error> {
104 let mut url = Url::parse("https://splits.io/api/v4/runners").unwrap();
105 url.path_segments_mut().unwrap().extend(&[name, "games"]);
106
107 let ContainsGames { games } = get_json(client, client.client.get(url)).await?;
108
109 Ok(games)
110}
111
112pub async fn get_categories(client: &Client, name: &str) -> Result<Vec<Category>, Error> {
114 let mut url = Url::parse("https://splits.io/api/v4/runners").unwrap();
115 url.path_segments_mut()
116 .unwrap()
117 .extend(&[name, "categories"]);
118
119 let ContainsCategories { categories } = get_json(client, client.client.get(url)).await?;
120
121 Ok(categories)
122}