use crate::mojang_api::client::get;
use crate::mojang_api::error::{ApiError, UsernameError};
use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub struct User {
pub id: String,
pub name: String,
}
impl User {
fn fetch(username: &str) -> Result<Self, ApiError> {
let url = format!(
"https://api.mojang.com/users/profiles/minecraft/{}",
username
);
Ok(get(url)?.json()?)
}
}
pub fn get_username_uuid(username: &str) -> Result<String, ApiError> {
User::fetch(username).map(|p| p.id)
}
pub fn validate_username(username: &str) -> Result<(), UsernameError> {
if username.len() == 0 {
return Err(UsernameError::Empty);
}
if username.len() > 16 {
return Err(UsernameError::TooLong);
}
username
.chars()
.find(|&ch| !ch.is_ascii_alphanumeric() && ch != '_')
.map_or(Ok(()), |ch| Err(UsernameError::InvalidCharacter(ch)))
}