libsignal_service/
service_address.rs

1use libsignal_protocol::{Aci, DeviceId, Pni, ProtocolAddress, ServiceId};
2
3pub trait ServiceIdExt {
4    fn to_protocol_address(
5        self,
6        device_id: impl Into<DeviceId>,
7    ) -> ProtocolAddress;
8
9    fn aci(self) -> Option<Aci>;
10
11    fn pni(self) -> Option<Pni>;
12}
13
14impl<A> ServiceIdExt for A
15where
16    A: Into<ServiceId>,
17{
18    fn to_protocol_address(
19        self,
20        device_id: impl Into<DeviceId>,
21    ) -> ProtocolAddress {
22        let service_id: ServiceId = self.into();
23        ProtocolAddress::new(service_id.service_id_string(), device_id.into())
24    }
25
26    fn aci(self) -> Option<Aci> {
27        match self.into() {
28            ServiceId::Aci(aci) => Some(aci),
29            ServiceId::Pni(_) => None,
30        }
31    }
32
33    fn pni(self) -> Option<Pni> {
34        match self.into() {
35            ServiceId::Aci(_) => None,
36            ServiceId::Pni(pni) => Some(pni),
37        }
38    }
39}