extern crate serde;
extern crate serde_json;
extern crate wireless;
use self::serde::ser::Serialize;
use std::error::Error;
use std::fs::File;
use std::io::{BufReader, BufWriter};
use super::Data;
use wireless::*;
pub fn read() -> Data {
let countries = match read_countries() {
Ok(a) => {
println!("{} countries read.", a.len());
a
}
Err(e) => {
println!("Error reading countries data: {}.", e);
println!("Starting with empty set of countries.");
Countries::new()
}
};
let lte_cells = match read_lte_cells() {
Ok(a) => {
println!("{} LTE cells read.", a.len());
a
}
Err(e) => {
println!("Error reading LTE cells data: {}.", e);
println!("Starting with empty set of LTE cells.");
LTECells::new()
}
};
let networks = match read_networks() {
Ok(a) => {
println!("{} networks read.", a.len());
a
}
Err(e) => {
println!("Error reading networks data: {}.", e);
println!("Starting with empty set of networks.");
Networks::new()
}
};
Data {
countries: countries,
lte_cells: lte_cells,
networks: networks,
}
}
pub fn write(data: &Data) {
write_json("countries.json", &data.countries);
write_json("lte_cells.json", &data.lte_cells);
write_json("networks.json", &data.networks);
}
fn read_countries() -> Result<Countries, String> {
let file = match File::open("countries.json") {
Ok(a) => a,
Err(e) => return Err(e.description().to_string()),
};
let reader = BufReader::new(file);
match serde_json::from_reader(reader) {
Ok(a) => return Ok(a),
Err(e) => return Err(e.description().to_string()),
};
}
fn read_lte_cells() -> Result<LTECells, String> {
let file = match File::open("lte_cells.json") {
Ok(a) => a,
Err(e) => return Err(e.description().to_string()),
};
let reader = BufReader::new(file);
match serde_json::from_reader(reader) {
Ok(a) => return Ok(a),
Err(e) => return Err(e.description().to_string()),
};
}
fn read_networks() -> Result<Networks, String> {
let file = match File::open("networks.json") {
Ok(a) => a,
Err(e) => return Err(e.description().to_string()),
};
let reader = BufReader::new(file);
match serde_json::from_reader(reader) {
Ok(a) => return Ok(a),
Err(e) => return Err(e.description().to_string()),
};
}
fn write_json<T: ?Sized>(file: &str, value: &T)
where T: Serialize
{
let file = match File::create(file) {
Ok(a) => a,
Err(e) => {
println!("Error: {}", e.description());
return;
}
};
let writer = BufWriter::new(file);
match serde_json::to_writer(writer, value) {
Ok(_) => return,
Err(e) => {
println!("Error: {}", e.description());
return;
}
}
}