]> nmode's Git Repositories - signal-cli/blob - src/main/java/org/asamk/signal/json/JsonSharedContact.java
Implement username links
[signal-cli] / src / main / java / org / asamk / signal / json / JsonSharedContact.java
1 package org.asamk.signal.json;
2
3 import com.fasterxml.jackson.annotation.JsonInclude;
4
5 import org.asamk.signal.manager.api.MessageEnvelope;
6
7 import java.util.List;
8
9 public record JsonSharedContact(
10 JsonContactName name,
11 @JsonInclude(JsonInclude.Include.NON_NULL) JsonContactAvatar avatar,
12 @JsonInclude(JsonInclude.Include.NON_NULL) List<JsonContactPhone> phone,
13 @JsonInclude(JsonInclude.Include.NON_NULL) List<JsonContactEmail> email,
14 @JsonInclude(JsonInclude.Include.NON_NULL) List<JsonContactAddress> address,
15 String organization
16 ) {
17
18 static JsonSharedContact from(MessageEnvelope.Data.SharedContact contact) {
19 final var name = JsonContactName.from(contact.name());
20 final var avatar = contact.avatar().isPresent() ? JsonContactAvatar.from(contact.avatar().get()) : null;
21
22 final var phone = !contact.phone().isEmpty()
23 ? contact.phone().stream().map(JsonContactPhone::from).toList()
24 : null;
25
26 final var email = !contact.email().isEmpty()
27 ? contact.email().stream().map(JsonContactEmail::from).toList()
28 : null;
29
30 final var address = !contact.address().isEmpty() ? contact.address()
31 .stream()
32 .map(JsonContactAddress::from)
33 .toList() : null;
34
35 final var organization = contact.organization().orElse(null);
36
37 return new JsonSharedContact(name, avatar, phone, email, address, organization);
38 }
39 }