]> nmode's Git Repositories - signal-cli/blob - src/main/java/org/asamk/signal/json/JsonSharedContact.java
Move Writer creation out of WriterImpls
[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 import java.util.stream.Collectors;
9
10 public record JsonSharedContact(
11 JsonContactName name,
12 @JsonInclude(JsonInclude.Include.NON_NULL) JsonContactAvatar avatar,
13 @JsonInclude(JsonInclude.Include.NON_NULL) List<JsonContactPhone> phone,
14 @JsonInclude(JsonInclude.Include.NON_NULL) List<JsonContactEmail> email,
15 @JsonInclude(JsonInclude.Include.NON_NULL) List<JsonContactAddress> address,
16 String organization
17 ) {
18
19 static JsonSharedContact from(MessageEnvelope.Data.SharedContact contact) {
20 final var name = JsonContactName.from(contact.name());
21 final var avatar = contact.avatar().isPresent() ? JsonContactAvatar.from(contact.avatar().get()) : null;
22
23 final var phone = contact.phone().size() > 0 ? contact.phone()
24 .stream()
25 .map(JsonContactPhone::from)
26 .collect(Collectors.toList()) : null;
27
28 final var email = contact.email().size() > 0 ? contact.email()
29 .stream()
30 .map(JsonContactEmail::from)
31 .collect(Collectors.toList()) : null;
32
33 final var address = contact.address().size() > 0 ? contact.address()
34 .stream()
35 .map(JsonContactAddress::from)
36 .collect(Collectors.toList()) : null;
37
38 final var organization = contact.organization().orElse(null);
39
40 return new JsonSharedContact(name, avatar, phone, email, address, organization);
41 }
42 }