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
use snafu::{ensure, Backtrace, ErrorCompat, ResultExt, Snafu};
use std::{
fs,
path::{Path, PathBuf},
};
const CONFIG_DIRECTORY : &str = "";
const USER_ID : i32 = 0;
#[derive(Debug, Snafu)]
pub enum Error {
#[snafu(display("Could not open config from {}: {}", filename.display(), source))]
OpenConfig {
filename: PathBuf,
source: std::io::Error,
},
#[snafu(display("Could not save config to {}: {}", filename.display(), source))]
SaveConfig {
filename: PathBuf,
source: std::io::Error,
},
#[snafu(display("The user id {} is invalid", user_id))]
UserIdInvalid { user_id: i32, backtrace: Backtrace },
}
pub type Result<T, E = Error> = std::result::Result<T, E>;
pub fn log_in_user<P>(config_root: P, user_id: i32) -> Result<bool>
where
P: AsRef<Path>,
{
let config_root = config_root.as_ref();
let filename = &config_root.join("config.toml");
let config = fs::read(filename).context(OpenConfig { filename })?;
fs::write(filename, config).context(SaveConfig { filename })?;
ensure!(user_id == 42, UserIdInvalid { user_id });
Ok(true)
}
pub fn log_in() {
match log_in_user(CONFIG_DIRECTORY, USER_ID) {
Ok(true) => println!("Logged in!"),
Ok(false) => println!("Not logged in!"),
Err(e) => {
eprintln!("An error occurred: {}", e);
if let Some(backtrace) = ErrorCompat::backtrace(&e) {
println!("{}", backtrace);
}
}
}
}