Geoffrey-rs/geoffrey_api/src/helper/mod.rs

37 lines
1.0 KiB
Rust

use crate::Result;
use geoffrey_db::database::Database;
use geoffrey_models::models::parameters::{CommandRequest, GeoffreyParam, GeoffreyRequest};
use geoffrey_models::models::player::Player;
use geoffrey_models::models::response::api_error::GeoffreyAPIError;
use geoffrey_models::models::token::Token;
pub fn get_player_from_req<T: GeoffreyParam>(
db: &Database,
req: &CommandRequest<T>,
) -> Result<Option<Player>> {
if let Some(user_id) = &req.user_id {
Ok(db
.filter(|_, player: &Player| player.has_user_id(user_id))?
.next())
} else {
Ok(None)
}
}
pub fn get_token_from_req<T: GeoffreyParam, U: GeoffreyRequest<T>>(
db: &Database,
req: &U,
) -> Result<Option<Token>> {
Ok(db
.filter(|_, token: &Token| token.secret == req.get_token())?
.next())
}
pub fn validate_string_parameter(param_name: &str, s: &str, max_len: usize) -> Result<()> {
if s.len() < max_len {
Ok(())
} else {
Err(GeoffreyAPIError::ParameterInvalid(param_name.to_string()))
}
}