Skip to main content

samurai/bootstrap/
file.rs

1use std::fs::File;
2use std::io::{BufWriter, BufReader};
3use crate::node::Node;
4use crate::error::FileError;
5use serde_json::Value;
6
7pub fn save(path: &str, node_list: &Vec<Node>) -> Result<(), FileError> {
8    let file = match File::create(&path) {
9        Err(_) => return Err(FileError::OpenFile),
10        Ok(file) => file,
11    };
12
13    let writer = BufWriter::new(file);
14    if let Err(_) = serde_json::to_writer_pretty(writer, node_list) {
15        return Err(FileError::SaveData);
16    }
17
18    Ok(())
19}
20
21pub fn load(path: &str) -> Result<Vec<Node>, FileError> {
22    let file = match File::open(&path) {
23        Err(_) => return Err(FileError::OpenFile),
24        Ok(file) => file,
25    };
26
27    let reader = BufReader::new(file);
28
29    match serde_json::from_reader(reader) {
30        Ok(nodes) => Ok(nodes),
31        Err(_) => Err(FileError::LoadData),
32    }
33}