44 lines
1.1 KiB
Rust
44 lines
1.1 KiB
Rust
use std::env;
|
|
use std::result::Result;
|
|
use std::error::Error;
|
|
use mysql::*;
|
|
use mysql::prelude::*;
|
|
use crate::types;
|
|
|
|
pub fn get_maps() -> Result<Vec<types::Map>, Box<dyn Error>> {
|
|
let mut conn = create_pool()?.get_conn()?;
|
|
|
|
let maps = conn.query_map(
|
|
"SELECT * FROM record_maps",
|
|
|(name, server, points, stars, mapper, timestamp)| types::Map {
|
|
name, server, points, stars, mapper, timestamp
|
|
}
|
|
)?;
|
|
|
|
Ok(maps)
|
|
}
|
|
|
|
pub fn get_map_by_name(name: &str) -> Result<Option<types::Map>, Box<dyn Error>> {
|
|
let mut conn = create_pool()?.get_conn()?;
|
|
let stmt = conn.prep("SELECT * FROM record_maps WHERE Map = ?")?;
|
|
|
|
let map = conn.exec_first(
|
|
&stmt,
|
|
(name,)
|
|
)?;
|
|
|
|
Ok(match map {
|
|
Some((name, server, points, stars, mapper, timestamp)) => Some(types::Map {
|
|
name, server, points, stars, mapper, timestamp
|
|
}),
|
|
None => None
|
|
})
|
|
}
|
|
|
|
|
|
|
|
pub fn create_pool() -> Result<Pool, Box<dyn Error>> {
|
|
let url = env::var("DB_URI")?;
|
|
let pool = Pool::new(url.as_str())?;
|
|
Ok(pool)
|
|
} |