]>
nmode's Git Repositories - signal-cli/blob - lib/src/main/java/org/asamk/signal/manager/api/RecipientIdentifier.java
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
.slf4j
.Logger
;
6 import org
.slf4j
.LoggerFactory
;
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
{
23 if (UuidUtil
.isUuid(identifier
)) {
24 return new Uuid(UUID
.fromString(identifier
));
27 final var normalizedNumber
= PhoneNumberFormatter
.formatNumber(identifier
, localNumber
);
28 if (!normalizedNumber
.equals(identifier
)) {
29 final Logger logger
= LoggerFactory
.getLogger(RecipientIdentifier
.class);
30 logger
.debug("Normalized number {} to {}.", identifier
, normalizedNumber
);
32 return new Number(normalizedNumber
);
33 } catch (org
.whispersystems
.signalservice
.api
.util
.InvalidNumberException e
) {
34 throw new InvalidNumberException(e
.getMessage(), e
);
38 static Single
fromAddress(RecipientAddress address
) {
39 if (address
.getNumber().isPresent()) {
40 return new Number(address
.getNumber().get());
41 } else if (address
.getUuid().isPresent()) {
42 return new Uuid(address
.getUuid().get());
44 throw new AssertionError("RecipientAddress without identifier");
47 String
getIdentifier();
50 record Uuid(UUID uuid
) implements Single
{
53 public String
getIdentifier() {
54 return uuid
.toString();
58 record Number(String number
) implements Single
{
61 public String
getIdentifier() {
66 record Group(GroupId groupId
) implements RecipientIdentifier
{}