libsignal_service/utils/
phonenumber.rs1type ParseError = <libsignal_core::E164 as std::str::FromStr>::Err;
2
3#[cfg(feature = "phonenumber")]
4pub fn phonenumber_to_signal(
5 number: &phonenumber::PhoneNumber,
6) -> libsignal_core::E164 {
7 number.to_string().parse().expect("valid phonenumber")
8}
9
10#[cfg(feature = "phonenumber")]
11pub fn phonenumber_from_signal(
12 number: &libsignal_core::E164,
13) -> phonenumber::PhoneNumber {
14 phonenumber::parse(None, number.to_string()).expect("valid phonenumber")
15}
16
17pub trait TryIntoE164: Sized {
18 fn try_into_e164(self) -> Result<libsignal_core::E164, ParseError>;
19}
20
21impl TryIntoE164 for &str {
22 fn try_into_e164(self) -> Result<libsignal_core::E164, ParseError> {
23 self.parse()
24 }
25}
26
27impl TryIntoE164 for libsignal_core::E164 {
28 fn try_into_e164(self) -> Result<libsignal_core::E164, ParseError> {
29 Ok(self)
30 }
31}
32
33#[cfg(feature = "phonenumber")]
34impl TryIntoE164 for phonenumber::PhoneNumber {
35 fn try_into_e164(self) -> Result<libsignal_core::E164, ParseError> {
36 Ok(phonenumber_to_signal(&self))
37 }
38}
39
40#[cfg(feature = "phonenumber")]
41impl TryIntoE164 for &phonenumber::PhoneNumber {
42 fn try_into_e164(self) -> Result<libsignal_core::E164, ParseError> {
43 Ok(phonenumber_to_signal(self))
44 }
45}