use serde::{Deserialize, Serialize};
use thiserror::Error;
pub const API_PREFIX: &str = "https://api.modrinth.com";
#[derive(Debug, Deserialize, Serialize, Clone)]
pub struct ModID(pub String);
#[derive(Debug, Deserialize, Serialize, Clone)]
pub struct VersionID(pub String);
#[derive(Debug, Deserialize, Serialize, Clone)]
pub struct UserID(pub String);
#[derive(Debug, Clone, Copy)]
#[allow(dead_code)]
pub enum SearchSorting {
Relevance,
Downloads,
Updated,
Newest,
}
#[derive(Debug, Error)]
#[allow(clippy::large_enum_variant)] pub enum Error {
#[error("got io error: ({0})")]
IoError(#[from] std::io::Error),
#[error("got network error: ({0})")]
NetError(#[from] ureq::Error),
}
#[derive(Debug, Deserialize, Serialize, Clone, Copy)]
#[serde(rename_all = "lowercase")]
pub enum Hosts {
Modrinth,
}
#[derive(Debug, Deserialize, Serialize, Clone, Copy)]
#[serde(rename_all = "lowercase")]
pub enum ModSideRequirement {
Required,
Optional,
Unsupported,
}
#[derive(Debug, Deserialize, Serialize, Clone, Copy)]
#[serde(rename_all = "lowercase")]
pub enum ModStatus {
Approved,
Rejected,
Draft,
Unlisted,
Processing,
Unknown,
}
#[derive(Debug, Deserialize, Serialize, Clone, Copy)]
#[serde(rename_all = "lowercase")]
pub enum ModReleaseType {
Alpha,
Beta,
Release,
}
#[derive(Debug, Deserialize, Serialize, Clone)]
pub struct License {
pub id: String,
pub name: String,
pub url: String,
}
#[derive(Debug, Deserialize, Serialize, Clone)]
pub struct DonationLink {
pub id: String,
pub platform: String,
pub url: String,
}
#[derive(Debug, Deserialize, Serialize, Clone, Copy)]
#[serde(rename_all = "lowercase")]
pub enum UserRole {
Developer,
Moderator,
Admin,
}
#[derive(Debug, Deserialize, Serialize, Clone)]
pub struct User {
pub id: UserID,
pub github_id: Option<u64>,
pub username: String,
pub name: String,
pub email: Option<String>,
pub avatar_url: Option<String>,
pub bio: String,
pub created: String,
pub role: UserRole,
}