2022-05-02 16:53:10 +01:00
|
|
|
use std::fs::File;
|
2022-05-07 22:30:57 +01:00
|
|
|
use std::io;
|
|
|
|
use std::io::{BufReader, BufWriter};
|
2022-05-02 16:53:10 +01:00
|
|
|
|
2022-05-07 22:30:57 +01:00
|
|
|
use crate::Pasta;
|
2022-05-02 16:53:10 +01:00
|
|
|
|
2022-11-08 16:30:16 -05:00
|
|
|
static DATABASE_PATH: &str = "pasta_data/database.json";
|
2022-05-02 16:53:10 +01:00
|
|
|
|
|
|
|
pub fn save_to_file(pasta_data: &Vec<Pasta>) {
|
|
|
|
let mut file = File::create(DATABASE_PATH);
|
|
|
|
match file {
|
|
|
|
Ok(_) => {
|
2022-05-07 22:30:57 +01:00
|
|
|
let writer = BufWriter::new(file.unwrap());
|
|
|
|
serde_json::to_writer(writer, &pasta_data).expect("Failed to create JSON writer");
|
2022-05-02 16:53:10 +01:00
|
|
|
}
|
|
|
|
Err(_) => {
|
|
|
|
log::info!("Database file {} not found!", DATABASE_PATH);
|
|
|
|
file = File::create(DATABASE_PATH);
|
|
|
|
match file {
|
|
|
|
Ok(_) => {
|
|
|
|
log::info!("Database file {} created.", DATABASE_PATH);
|
|
|
|
save_to_file(pasta_data);
|
|
|
|
}
|
|
|
|
Err(err) => {
|
|
|
|
log::error!(
|
|
|
|
"Failed to create database file {}: {}!",
|
|
|
|
&DATABASE_PATH,
|
|
|
|
&err
|
|
|
|
);
|
|
|
|
panic!("Failed to create database file {}: {}!", DATABASE_PATH, err)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
pub fn load_from_file() -> io::Result<Vec<Pasta>> {
|
2022-05-07 22:30:57 +01:00
|
|
|
let file = File::open(DATABASE_PATH);
|
2022-05-02 16:53:10 +01:00
|
|
|
match file {
|
|
|
|
Ok(_) => {
|
2022-05-07 22:30:57 +01:00
|
|
|
let reader = BufReader::new(file.unwrap());
|
2022-06-03 17:24:34 +01:00
|
|
|
let data: Vec<Pasta> = match serde_json::from_reader(reader) {
|
|
|
|
Ok(t) => t,
|
|
|
|
_ => Vec::new(),
|
|
|
|
};
|
2022-05-02 16:53:10 +01:00
|
|
|
Ok(data)
|
|
|
|
}
|
|
|
|
Err(_) => {
|
|
|
|
log::info!("Database file {} not found!", DATABASE_PATH);
|
|
|
|
save_to_file(&Vec::<Pasta>::new());
|
|
|
|
|
|
|
|
log::info!("Database file {} created.", DATABASE_PATH);
|
|
|
|
load_from_file()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|