extern crate wireless;
mod json;
mod stdin;
use self::wireless::{Countries, Country, LTECell, LTECells, Network, Networks};
pub struct Data {
pub countries: Countries,
pub lte_cells: LTECells,
pub networks: Networks,
}
impl Data {
pub fn add_country(&mut self) {
let mcc = match stdin::read_u16("MCC: ", None) {
Some(a) => a,
None => return,
};
let name = match stdin::read_string("Name: ", None) {
Some(a) => a,
None => return,
};
let country = Country { mcc: mcc, name: name };
self.countries.insert(country.mcc, country);
}
pub fn add_lte_cell(&mut self) {
let mcc = match stdin::read_u16("MCC: ", None) {
Some(a) => a,
None => return,
};
let mnc = match stdin::read_u16("MNC: ", None) {
Some(a) => a,
None => return,
};
let id = match stdin::read_u32("CID: ", None) {
Some(a) => a,
None => return,
};
let cell = LTECell { mcc: mcc, mnc: mnc, id: id };
if self.lte_cells.contains_key(&cell.global_id()) {
println!("Duplicate cell in database.");
}
self.lte_cells.insert(cell.global_id(), cell);
}
pub fn add_network(&mut self) {
let mcc = match stdin::read_u16("MCC: ", None) {
Some(a) => a,
None => return,
};
let mnc = match stdin::read_u16("MNC: ", None) {
Some(a) => a,
None => return,
};
let name = match stdin::read_string("Name: ", None) {
Some(a) => a,
None => return,
};
let network = Network { mcc: mcc, mnc: mnc, name: name };
self.networks.insert(network.id(), network);
}
pub fn print_countries(&self) {
for country in self.countries.values() {
println!("#{}: {}", country.mcc, country.name);
}
}
pub fn print_lte_cells(&self) {
for lte_cell in self.lte_cells.values() {
println!("#{}-{}-{}", lte_cell.mcc, lte_cell.mnc, lte_cell.id);
}
}
pub fn print_networks(&self) {
for network in self.networks.values() {
if network.mnc % 10 == 0 {
println!("#{}-{:02}: {}", network.mcc, network.mnc / 10, network.name);
} else {
println!("#{}-{:03}: {}", network.mcc, network.mnc, network.name);
}
}
}
pub fn read() -> Data { json::read() }
pub fn write(&self) { json::write(self); }
}