summaryrefslogtreecommitdiff
path: root/src/apis/modrinth.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/apis/modrinth.rs')
-rw-r--r--src/apis/modrinth.rs18
1 files changed, 15 insertions, 3 deletions
diff --git a/src/apis/modrinth.rs b/src/apis/modrinth.rs
index 5366f3d..75e65e6 100644
--- a/src/apis/modrinth.rs
+++ b/src/apis/modrinth.rs
@@ -3,7 +3,7 @@ use reqwest::Client;
3use serde::{Deserialize, Serialize}; 3use serde::{Deserialize, Serialize};
4 4
5use crate::{ 5use crate::{
6 error::{ErrorType, MLError, MLE}, 6 error::{EType, MLErr, MLE},
7 List, 7 List,
8}; 8};
9 9
@@ -130,6 +130,8 @@ pub enum GameVersionType {
130 beta, 130 beta,
131} 131}
132 132
133/// # Errors
134/// # Panics
133async fn get( 135async fn get(
134 api: &str, 136 api: &str,
135 path: &str, 137 path: &str,
@@ -153,6 +155,8 @@ async fn get(
153 Ok(data) 155 Ok(data)
154} 156}
155 157
158/// # Errors
159/// # Panics
156pub async fn project(api: &str, name: &str) -> Project { 160pub async fn project(api: &str, name: &str) -> Project {
157 let url = format!("project/{name}"); 161 let url = format!("project/{name}");
158 let data = get(api, &url).await.unwrap().unwrap(); 162 let data = get(api, &url).await.unwrap().unwrap();
@@ -160,6 +164,8 @@ pub async fn project(api: &str, name: &str) -> Project {
160 serde_json::from_slice(&data).unwrap() 164 serde_json::from_slice(&data).unwrap()
161} 165}
162 166
167/// # Errors
168/// # Panics
163pub async fn projects(api: &str, ids: Vec<String>) -> Vec<Project> { 169pub async fn projects(api: &str, ids: Vec<String>) -> Vec<Project> {
164 let all = ids.join(r#"",""#); 170 let all = ids.join(r#"",""#);
165 let url = format!(r#"projects?ids=["{all}"]"#); 171 let url = format!(r#"projects?ids=["{all}"]"#);
@@ -170,6 +176,8 @@ pub async fn projects(api: &str, ids: Vec<String>) -> Vec<Project> {
170} 176}
171 177
172///Get applicable versions from `mod_id` with list context 178///Get applicable versions from `mod_id` with list context
179/// # Errors
180/// # Panics
173pub async fn versions(api: &str, id: String, list: List) -> Vec<Version> { 181pub async fn versions(api: &str, id: String, list: List) -> Vec<Version> {
174 let url = format!( 182 let url = format!(
175 r#"project/{}/version?loaders=["{}"]&game_versions=["{}"]"#, 183 r#"project/{}/version?loaders=["{}"]&game_versions=["{}"]"#,
@@ -185,6 +193,8 @@ pub async fn versions(api: &str, id: String, list: List) -> Vec<Version> {
185} 193}
186 194
187///Get version with the version ids 195///Get version with the version ids
196/// # Errors
197/// # Panics
188pub async fn get_raw_versions( 198pub async fn get_raw_versions(
189 api: &str, 199 api: &str,
190 versions: Vec<String>, 200 versions: Vec<String>,
@@ -196,9 +206,10 @@ pub async fn get_raw_versions(
196 serde_json::from_slice(&data).unwrap() 206 serde_json::from_slice(&data).unwrap()
197} 207}
198 208
209/// # Errors
199pub fn extract_current_version(versions: Vec<Version>) -> MLE<String> { 210pub fn extract_current_version(versions: Vec<Version>) -> MLE<String> {
200 match versions.len() { 211 match versions.len() {
201 0 => Err(MLError::new(ErrorType::ModError, "NO_VERSIONS_AVAILABLE")), 212 0 => Err(MLErr::new(EType::ModError, "NO_VERSIONS_AVAILABLE")),
202 1.. => { 213 1.. => {
203 let mut times: Vec<(String, DateTime<FixedOffset>)> = vec![]; 214 let mut times: Vec<(String, DateTime<FixedOffset>)> = vec![];
204 for ver in versions { 215 for ver in versions {
@@ -209,10 +220,11 @@ pub fn extract_current_version(versions: Vec<Version>) -> MLE<String> {
209 times.reverse(); 220 times.reverse();
210 Ok(times[0].0.to_string()) 221 Ok(times[0].0.to_string())
211 } 222 }
212 _ => panic!("available_versions should never be negative"),
213 } 223 }
214} 224}
215 225
226/// # Errors
227/// # Panics
216pub async fn get_game_versions() -> Vec<GameVersion> { 228pub async fn get_game_versions() -> Vec<GameVersion> {
217 let data = get("https://api.modrinth.com/v2/", "tag/game_version") 229 let data = get("https://api.modrinth.com/v2/", "tag/game_version")
218 .await 230 .await