libsignal_service/
service_address.rs1use 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}