libsignal_service/utils/
phonenumber.rs

1type 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}