Compare commits
No commits in common. "b281f85a70a9a741d1a0851deefcb80e6aa22061" and "f56ccf471fca0e9099ec7db309d49c93a0b6deae" have entirely different histories.
b281f85a70
...
f56ccf471f
419
Cargo.lock
generated
419
Cargo.lock
generated
File diff suppressed because it is too large
Load Diff
@ -14,7 +14,7 @@ rand="0.8"
|
||||
serde="1.0"
|
||||
serde_json="1.0"
|
||||
rocket="0.4"
|
||||
chgk_ledb_lib = {git = "https://gitea.b4tman.ru/b4tman/chgk_ledb.git", rev="8120a996a3", package="chgk_ledb_lib"}
|
||||
chgk_ledb_lib = {git = "https://gitea.b4tman.ru/b4tman/chgk_ledb.git", rev="e521e39f5e", package="chgk_ledb_lib"}
|
||||
|
||||
[dependencies.rocket_contrib]
|
||||
version = "0.4"
|
||||
|
36
src/main.rs
36
src/main.rs
@ -15,8 +15,6 @@ use rocket_contrib::templates::Template;
|
||||
use rand::distributions::Uniform;
|
||||
use rand::Rng;
|
||||
|
||||
use std::sync::Arc;
|
||||
|
||||
use chgk_ledb_lib::db;
|
||||
use chgk_ledb_lib::questions::Question;
|
||||
|
||||
@ -34,24 +32,18 @@ impl<T, E> ErrorEmpty for Result<T, E> {
|
||||
}
|
||||
}
|
||||
|
||||
type DataBaseInner = db::Reader<Question>;
|
||||
type DataBase = Arc<DataBaseInner>;
|
||||
struct AppState{
|
||||
db: DataBase,
|
||||
database_distribution: Uniform<usize>,
|
||||
}
|
||||
|
||||
impl From<DataBaseInner> for AppState {
|
||||
fn from(db: DataBaseInner) -> Self {
|
||||
let last_id = db.len();
|
||||
let database_distribution = rand::distributions::Uniform::new_inclusive(1usize, last_id);
|
||||
let db = Arc::new(db);
|
||||
fn open_db() -> db::Reader<Question> {
|
||||
db::Reader::new(DB_FILENAME, 2048).expect("new db reader")
|
||||
}
|
||||
|
||||
Self {
|
||||
db,
|
||||
database_distribution
|
||||
}
|
||||
}
|
||||
fn get_database_distribution() -> Uniform<usize> {
|
||||
let last_id = open_db().len();
|
||||
|
||||
rand::distributions::Uniform::new_inclusive(1usize, last_id)
|
||||
}
|
||||
|
||||
fn random_question_id(database_distribution: &Uniform<usize>) -> usize {
|
||||
@ -59,12 +51,12 @@ fn random_question_id(database_distribution: &Uniform<usize>) -> usize {
|
||||
rng.sample(database_distribution)
|
||||
}
|
||||
|
||||
fn get_question(db: &DataBase, id: usize) -> Result<Question, ()> {
|
||||
db.get(id - 1).err_empty()
|
||||
fn get_question(id: usize) -> Result<Question, ()> {
|
||||
open_db().get(id - 1).err_empty()
|
||||
}
|
||||
|
||||
fn show_question_details(template_name: &'static str, data: &AppState, id: usize) -> Template {
|
||||
match get_question(&data.db, id) {
|
||||
match get_question(id) {
|
||||
Ok(question) => {
|
||||
let mut context = serde_json::to_value(question).expect("question serialize");
|
||||
if context.is_object() {
|
||||
@ -76,7 +68,7 @@ fn show_question_details(template_name: &'static str, data: &AppState, id: usize
|
||||
Err(_) => {
|
||||
use std::collections::HashMap;
|
||||
let context: HashMap<String, String> = HashMap::new();
|
||||
Template::render("404", context)
|
||||
Template::render("404", &context)
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -111,11 +103,13 @@ fn index(data: State<AppState>) -> Redirect {
|
||||
fn not_found(_req: &rocket::Request) -> Template {
|
||||
use std::collections::HashMap;
|
||||
let context: HashMap<String, String> = HashMap::new();
|
||||
Template::render("404", context)
|
||||
Template::render("404", &context)
|
||||
}
|
||||
|
||||
fn rocket() -> Rocket {
|
||||
let state: AppState = db::Reader::new(DB_FILENAME, 2048).expect("open db").into();
|
||||
let state = AppState {
|
||||
database_distribution: get_database_distribution(),
|
||||
};
|
||||
|
||||
rocket::ignite()
|
||||
.manage(state)
|
||||
|
Loading…
Reference in New Issue
Block a user