]> nmode's Git Repositories - signal-cli/blob - lib/src/main/java/org/asamk/signal/manager/api/RecipientIdentifier.java
Implement sending mentions
[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.util.PhoneNumberFormatter;
6 import org.whispersystems.signalservice.api.util.UuidUtil;
7
8 import java.util.UUID;
9
10 public sealed interface RecipientIdentifier {
11
12 record NoteToSelf() implements RecipientIdentifier {
13
14 public static NoteToSelf INSTANCE = new NoteToSelf();
15 }
16
17 sealed interface Single extends RecipientIdentifier {
18
19 static Single fromString(String identifier, String localNumber) throws InvalidNumberException {
20 try {
21 return UuidUtil.isUuid(identifier)
22 ? new Uuid(UUID.fromString(identifier))
23 : new Number(PhoneNumberFormatter.formatNumber(identifier, localNumber));
24 } catch (org.whispersystems.signalservice.api.util.InvalidNumberException e) {
25 throw new InvalidNumberException(e.getMessage(), e);
26 }
27 }
28
29 static Single fromAddress(RecipientAddress address) {
30 if (address.getNumber().isPresent()) {
31 return new Number(address.getNumber().get());
32 } else if (address.getUuid().isPresent()) {
33 return new Uuid(address.getUuid().get());
34 }
35 throw new AssertionError("RecipientAddress without identifier");
36 }
37
38 String getIdentifier();
39 }
40
41 record Uuid(UUID uuid) implements Single {
42
43 @Override
44 public String getIdentifier() {
45 return uuid.toString();
46 }
47 }
48
49 record Number(String number) implements Single {
50
51 @Override
52 public String getIdentifier() {
53 return number;
54 }
55 }
56
57 record Group(GroupId groupId) implements RecipientIdentifier {}
58 }