1 package org
.asamk
.signal
.manager
.api
;
3 import org
.asamk
.signal
.manager
.groups
.GroupId
;
4 import org
.asamk
.signal
.manager
.storage
.recipients
.RecipientAddress
;
5 import org
.whispersystems
.signalservice
.api
.push
.SignalServiceAddress
;
6 import org
.whispersystems
.signalservice
.api
.util
.InvalidNumberException
;
7 import org
.whispersystems
.signalservice
.api
.util
.PhoneNumberFormatter
;
8 import org
.whispersystems
.signalservice
.api
.util
.UuidUtil
;
10 import java
.util
.UUID
;
12 public sealed interface RecipientIdentifier
{
14 record NoteToSelf() implements RecipientIdentifier
{
16 public static NoteToSelf INSTANCE
= new NoteToSelf();
19 sealed interface Single
extends RecipientIdentifier
{
21 static Single
fromString(String identifier
, String localNumber
) throws InvalidNumberException
{
22 return UuidUtil
.isUuid(identifier
)
23 ?
new Uuid(UUID
.fromString(identifier
))
24 : new Number(PhoneNumberFormatter
.formatNumber(identifier
, localNumber
));
27 static Single
fromAddress(SignalServiceAddress address
) {
28 return new Uuid(address
.getUuid());
31 static Single
fromAddress(RecipientAddress address
) {
32 if (address
.getNumber().isPresent()) {
33 return new Number(address
.getNumber().get());
34 } else if (address
.getUuid().isPresent()) {
35 return new Uuid(address
.getUuid().get());
37 throw new AssertionError("RecipientAddress without identifier");
40 String
getIdentifier();
43 record Uuid(UUID uuid
) implements Single
{
46 public String
getIdentifier() {
47 return uuid
.toString();
51 record Number(String number
) implements Single
{
54 public String
getIdentifier() {
59 record Group(GroupId groupId
) implements RecipientIdentifier
{}