Spaces:
Sleeping
Sleeping
File size: 1,720 Bytes
e4dfce5 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
use rocket::{get, launch, routes};
use rocket::State;
use std::env;
use std::fs::File;
use std::io::Read;
use std::sync::{Arc, Mutex};
struct Counter {
value: i32,
username: String,
}
#[get("/")]
fn index(counter: &State<Arc<Mutex<Counter>>>) -> String {
let counter_lock = counter.lock().unwrap();
format!("Hi {}!\nCounter: {}", counter_lock.username, counter_lock.value)
}
#[get("/add")]
fn increment(counter: &State<Arc<Mutex<Counter>>>) -> String {
let mut counter_lock = counter.lock().unwrap();
counter_lock.value += 1;
format!("Hi {}!\nIncremented!\nNew value: {}", counter_lock.username, counter_lock.value)
}
#[get("/reset")]
fn reset(counter: &State<Arc<Mutex<Counter>>>) -> String {
let mut counter_lock = counter.lock().unwrap();
counter_lock.value = 0;
format!("Hi {}!\nReset Success!\nCounter: {}", counter_lock.username, counter_lock.value)
}
#[launch]
fn rocket() -> _ {
let config_path: String = match env::var("CONFIG_PATH") {
Ok(val) => val,
Err(_) => "config.yaml".to_string(),
};
println!("Using config file: {config_path}");
let mut f: File = std::fs::File::open(config_path).expect("Can't open config.yaml");
let mut str: String = String::new();
f.read_to_string(&mut str).expect("Can't read config.yaml");
let data: serde_yaml::Value = serde_yaml::from_str(&str).expect("Can't parse config.yaml");
let username: String = data["username"]
.as_str()
.map(|s| s.to_string())
.expect("Can't find username in config.yaml");
rocket::build()
.manage(Arc::new(Mutex::new(Counter { value: 0, username: username })))
.mount("/", routes![index, increment, reset])
}
|