use rasn::types::ObjectIdentifier;
const MAP_AC_BASE: [u32; 6] = [0, 4, 0, 0, 1, 0];
fn map_ac(ac_id: u32, version: u32) -> ObjectIdentifier {
let components: Vec<u32> = vec![
MAP_AC_BASE[0],
MAP_AC_BASE[1],
MAP_AC_BASE[2],
MAP_AC_BASE[3],
MAP_AC_BASE[4],
MAP_AC_BASE[5],
ac_id,
version,
];
ObjectIdentifier::new_unchecked(components.into())
}
pub const V1: u32 = 1;
pub const V2: u32 = 2;
pub const V3: u32 = 3;
pub fn network_loc_up_context(version: u32) -> ObjectIdentifier {
map_ac(1, version)
}
pub fn location_cancellation_context(version: u32) -> ObjectIdentifier {
map_ac(2, version)
}
pub fn inter_vlr_info_retrieval_context(version: u32) -> ObjectIdentifier {
map_ac(15, version)
}
pub fn ms_purging_context(version: u32) -> ObjectIdentifier {
map_ac(27, version)
}
pub fn info_retrieval_context(version: u32) -> ObjectIdentifier {
map_ac(5, version)
}
pub fn authentication_failure_report_context(version: u32) -> ObjectIdentifier {
map_ac(27, version)
}
pub fn subscriber_data_mngt_context(version: u32) -> ObjectIdentifier {
map_ac(16, version)
}
pub fn reset_context(version: u32) -> ObjectIdentifier {
map_ac(10, version)
}
pub fn roaming_number_enquiry_context(version: u32) -> ObjectIdentifier {
map_ac(3, version)
}
pub fn location_info_retrieval_context(version: u32) -> ObjectIdentifier {
map_ac(5, version)
}
pub fn network_unstructured_ss_context(version: u32) -> ObjectIdentifier {
map_ac(19, version)
}
pub fn ss_invocation_notification_context(version: u32) -> ObjectIdentifier {
map_ac(36, version)
}
pub fn short_msg_gateway_context(version: u32) -> ObjectIdentifier {
map_ac(20, version)
}
pub fn short_msg_mo_relay_context(version: u32) -> ObjectIdentifier {
map_ac(21, version)
}
pub fn short_msg_mt_relay_context(version: u32) -> ObjectIdentifier {
map_ac(25, version)
}
pub fn short_msg_alert_context(version: u32) -> ObjectIdentifier {
map_ac(23, version)
}
pub fn short_msg_relay_context(version: u32) -> ObjectIdentifier {
map_ac(21, version)
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn short_msg_gateway_v3() {
let oid = short_msg_gateway_context(V3);
let components: Vec<u32> = oid.iter().copied().collect();
assert_eq!(components, vec![0, 4, 0, 0, 1, 0, 20, 3]);
}
#[test]
fn network_loc_up_v2() {
let oid = network_loc_up_context(V2);
let components: Vec<u32> = oid.iter().copied().collect();
assert_eq!(components, vec![0, 4, 0, 0, 1, 0, 1, 2]);
}
#[test]
fn ussd_v2() {
let oid = network_unstructured_ss_context(V2);
let components: Vec<u32> = oid.iter().copied().collect();
assert_eq!(components, vec![0, 4, 0, 0, 1, 0, 19, 2]);
}
#[test]
fn different_versions() {
let v1 = short_msg_gateway_context(V1);
let v2 = short_msg_gateway_context(V2);
let v3 = short_msg_gateway_context(V3);
assert_ne!(v1, v2);
assert_ne!(v2, v3);
}
}