Skip to content

Commit dfd812e

Browse files
committed
retain mnc length
1 parent 090d8c8 commit dfd812e

File tree

1 file changed

+24
-4
lines changed

1 file changed

+24
-4
lines changed

src/carrier.rs

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ use crate::ParseError;
2323
pub struct Carrier {
2424
pub mcc: u16, // always 3 digits
2525
pub mnc: u16, // 2 or 3 digits
26+
pub mnc_3: bool,
2627
}
2728

2829
impl TryFrom<&str> for Carrier {
@@ -38,13 +39,18 @@ impl TryFrom<&str> for Carrier {
3839
.get(3..)
3940
.and_then(|c| c.parse().ok())
4041
.ok_or(ParseError::InvalidNetworkCode)?,
42+
mnc_3: value.len() == 6,
4143
})
4244
}
4345
}
4446

4547
impl fmt::Display for Carrier {
4648
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
47-
write!(f, "{}{}", self.mcc, self.mnc)
49+
if self.mnc_3 {
50+
write!(f, "{:03}{:03}", self.mcc, self.mnc)
51+
} else {
52+
write!(f, "{:03}{:02}", self.mcc, self.mnc)
53+
}
4854
}
4955
}
5056

@@ -55,7 +61,21 @@ mod test {
5561

5662
#[test]
5763
fn test_mobile_network_codes() {
58-
assert_eq!(Carrier { mcc: 336, mnc: 1 }, "336001".try_into().unwrap());
59-
assert_eq!(Carrier { mcc: 336, mnc: 35 }, "33635".try_into().unwrap());
64+
assert_eq!(
65+
Carrier {
66+
mcc: 336,
67+
mnc: 1,
68+
mnc_3: true
69+
},
70+
"336001".try_into().unwrap()
71+
);
72+
assert_eq!(
73+
Carrier {
74+
mcc: 336,
75+
mnc: 35,
76+
mnc_3: false
77+
},
78+
"33635".try_into().unwrap()
79+
);
6080
}
61-
}
81+
}

0 commit comments

Comments
 (0)