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