libsignal_service/
service_address.rs

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