use crate::error::{Error, Result};
use crate::models::{Bot, RankedBot};
pub fn validate_bot_id(id: u64) -> Result<()> {
if Bot::validate_id(id) {
Ok(())
} else {
Err(Error::InvalidBotId(id.to_string()))
}
}
pub fn validate_user_id(id: u64) -> Result<()> {
if Bot::validate_id(id) {
Ok(())
} else {
Err(Error::InvalidUserId(id.to_string()))
}
}
#[derive(serde::Deserialize)]
pub struct TagResponse {
pub data: TagData,
}
#[derive(serde::Deserialize)]
pub struct TagData {
pub results: Vec<Bot>,
}
#[derive(serde::Deserialize)]
pub struct CompareResponse {
pub data: Vec<RankedBot>,
}
#[must_use]
pub fn build_rankings_params(query: &crate::RankingsQuery) -> Vec<(&'static str, String)> {
let mut params: Vec<(&str, String)> = vec![
("sortBy", query.sort_by.to_string()),
("sortMethod", query.sort_order.to_string()),
];
if let Some(limit) = query.limit {
params.push(("limit", limit.to_string()));
}
if let Some(offset) = query.offset {
params.push(("offset", offset.to_string()));
}
params
}
#[must_use]
pub fn build_search_params(
query: &str,
limit: Option<u32>,
offset: Option<u32>,
include_deleted: Option<bool>,
) -> Vec<(&'static str, String)> {
let mut params: Vec<(&str, String)> = vec![("query", query.to_string())];
if let Some(limit) = limit {
params.push(("limit", limit.to_string()));
}
if let Some(offset) = offset {
params.push(("offset", offset.to_string()));
}
if let Some(include_deleted) = include_deleted {
params.push(("includeDeleted", include_deleted.to_string()));
}
params
}