]> nmode's Git Repositories - signal-cli/blob - lib/src/main/java/org/asamk/signal/manager/api/RecipientIdentifier.java
a4b79ba0b9584db81c26ee90f1bdeecb29a54757
[signal-cli] / lib / src / main / java / org / asamk / signal / manager / api / RecipientIdentifier.java
1 package org.asamk.signal.manager.api;
2
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;
9
10 import java.util.UUID;
11
12 public sealed interface RecipientIdentifier {
13
14 record NoteToSelf() implements RecipientIdentifier {
15
16 public static NoteToSelf INSTANCE = new NoteToSelf();
17 }
18
19 sealed interface Single extends RecipientIdentifier {
20
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));
25 }
26
27 static Single fromAddress(SignalServiceAddress address) {
28 return new Uuid(address.getUuid());
29 }
30
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());
36 }
37 throw new AssertionError("RecipientAddress without identifier");
38 }
39
40 String getIdentifier();
41 }
42
43 record Uuid(UUID uuid) implements Single {
44
45 @Override
46 public String getIdentifier() {
47 return uuid.toString();
48 }
49 }
50
51 record Number(String number) implements Single {
52
53 @Override
54 public String getIdentifier() {
55 return number;
56 }
57 }
58
59 record Group(GroupId groupId) implements RecipientIdentifier {}
60 }