#[macro_use]
extern crate serde_derive;
use std::collections::BTreeMap;
pub type Countries = BTreeMap<MCC, Country>;
#[allow(non_camel_case_types)]
pub type eNBId = u32;
pub type LTECellGlobalId = u64;
pub type LTECellId = u32;
pub type LTECells = BTreeMap<LTECellGlobalId, LTECell>;
pub type LTECellShortId = u8;
pub type MCC = u16;
pub type MNC = u16;
pub type NetworkId = u32;
pub type Networks = BTreeMap<NetworkId, Network>;
#[derive(Serialize, Deserialize)]
pub struct Country {
pub mcc: MCC,
pub name: String,
}
#[derive(Serialize, Deserialize)]
pub struct LTECell {
pub id: LTECellId,
pub mcc: MCC,
pub mnc: MNC,
}
#[derive(Serialize, Deserialize)]
pub struct Network {
pub mcc: MCC,
pub mnc: MNC,
pub name: String,
}
impl LTECell {
pub fn short_cid(&self) -> LTECellShortId { (self.id & (2 ^ 8 - 1)) as LTECellShortId }
pub fn global_id(&self) -> LTECellGlobalId {
Network::generate_id(self.mcc, self.mnc) as LTECellGlobalId + self.id as LTECellGlobalId
}
pub fn enb_id(&self) -> eNBId { self.id >> 8 }
}
impl Network {
pub fn generate_id(mcc: MCC, mnc: MNC) -> NetworkId {
((mcc as NetworkId) << 12) + (mnc as NetworkId)
}
pub fn id(&self) -> NetworkId { Network::generate_id(self.mcc, self.mnc) }
}