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="1.0"
|
||||||
serde_json="1.0"
|
serde_json="1.0"
|
||||||
rocket="0.4"
|
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]
|
[dependencies.rocket_contrib]
|
||||||
version = "0.4"
|
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::distributions::Uniform;
|
||||||
use rand::Rng;
|
use rand::Rng;
|
||||||
|
|
||||||
use std::sync::Arc;
|
|
||||||
|
|
||||||
use chgk_ledb_lib::db;
|
use chgk_ledb_lib::db;
|
||||||
use chgk_ledb_lib::questions::Question;
|
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{
|
struct AppState{
|
||||||
db: DataBase,
|
|
||||||
database_distribution: Uniform<usize>,
|
database_distribution: Uniform<usize>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl From<DataBaseInner> for AppState {
|
fn open_db() -> db::Reader<Question> {
|
||||||
fn from(db: DataBaseInner) -> Self {
|
db::Reader::new(DB_FILENAME, 2048).expect("new db reader")
|
||||||
let last_id = db.len();
|
}
|
||||||
let database_distribution = rand::distributions::Uniform::new_inclusive(1usize, last_id);
|
|
||||||
let db = Arc::new(db);
|
|
||||||
|
|
||||||
Self {
|
fn get_database_distribution() -> Uniform<usize> {
|
||||||
db,
|
let last_id = open_db().len();
|
||||||
database_distribution
|
|
||||||
}
|
rand::distributions::Uniform::new_inclusive(1usize, last_id)
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn random_question_id(database_distribution: &Uniform<usize>) -> usize {
|
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)
|
rng.sample(database_distribution)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn get_question(db: &DataBase, id: usize) -> Result<Question, ()> {
|
fn get_question(id: usize) -> Result<Question, ()> {
|
||||||
db.get(id - 1).err_empty()
|
open_db().get(id - 1).err_empty()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn show_question_details(template_name: &'static str, data: &AppState, id: usize) -> Template {
|
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) => {
|
Ok(question) => {
|
||||||
let mut context = serde_json::to_value(question).expect("question serialize");
|
let mut context = serde_json::to_value(question).expect("question serialize");
|
||||||
if context.is_object() {
|
if context.is_object() {
|
||||||
@ -76,7 +68,7 @@ fn show_question_details(template_name: &'static str, data: &AppState, id: usize
|
|||||||
Err(_) => {
|
Err(_) => {
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
let context: HashMap<String, String> = HashMap::new();
|
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 {
|
fn not_found(_req: &rocket::Request) -> Template {
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
let context: HashMap<String, String> = HashMap::new();
|
let context: HashMap<String, String> = HashMap::new();
|
||||||
Template::render("404", context)
|
Template::render("404", &context)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn rocket() -> Rocket {
|
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()
|
rocket::ignite()
|
||||||
.manage(state)
|
.manage(state)
|
||||||
|
Loading…
Reference in New Issue
Block a user