package org.asamk.signal.json;
import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import org.whispersystems.signalservice.api.messages.shared.SharedContact;
+import org.asamk.signal.manager.api.MessageEnvelope;
import java.util.List;
import java.util.stream.Collectors;
-public class JsonSharedContact {
-
- @JsonProperty
- final JsonContactName name;
-
- @JsonProperty
- final JsonContactAvatar avatar;
-
- @JsonProperty
- @JsonInclude(JsonInclude.Include.NON_NULL)
- final List<JsonContactPhone> phone;
-
- @JsonProperty
- @JsonInclude(JsonInclude.Include.NON_NULL)
- final List<JsonContactEmail> email;
-
- @JsonProperty
- @JsonInclude(JsonInclude.Include.NON_NULL)
- final List<JsonContactAddress> address;
-
- @JsonProperty
- final String organization;
-
- public JsonSharedContact(SharedContact contact) {
- name = new JsonContactName(contact.getName());
- if (contact.getAvatar().isPresent()) {
- avatar = new JsonContactAvatar(contact.getAvatar().get());
- } else {
- avatar = null;
- }
-
- if (contact.getPhone().isPresent()) {
- phone = contact.getPhone().get().stream().map(JsonContactPhone::new).collect(Collectors.toList());
- } else {
- phone = null;
- }
-
- if (contact.getEmail().isPresent()) {
- email = contact.getEmail().get().stream().map(JsonContactEmail::new).collect(Collectors.toList());
- } else {
- email = null;
- }
-
- if (contact.getAddress().isPresent()) {
- address = contact.getAddress().get().stream().map(JsonContactAddress::new).collect(Collectors.toList());
- } else {
- address = null;
- }
-
- organization = contact.getOrganization().orNull();
+public record JsonSharedContact(
+ JsonContactName name,
+ @JsonInclude(JsonInclude.Include.NON_NULL) JsonContactAvatar avatar,
+ @JsonInclude(JsonInclude.Include.NON_NULL) List<JsonContactPhone> phone,
+ @JsonInclude(JsonInclude.Include.NON_NULL) List<JsonContactEmail> email,
+ @JsonInclude(JsonInclude.Include.NON_NULL) List<JsonContactAddress> address,
+ String organization
+) {
+
+ static JsonSharedContact from(MessageEnvelope.Data.SharedContact contact) {
+ final var name = JsonContactName.from(contact.name());
+ final var avatar = contact.avatar().isPresent() ? JsonContactAvatar.from(contact.avatar().get()) : null;
+
+ final var phone = contact.phone().size() > 0 ? contact.phone()
+ .stream()
+ .map(JsonContactPhone::from)
+ .collect(Collectors.toList()) : null;
+
+ final var email = contact.email().size() > 0 ? contact.email()
+ .stream()
+ .map(JsonContactEmail::from)
+ .collect(Collectors.toList()) : null;
+
+ final var address = contact.address().size() > 0 ? contact.address()
+ .stream()
+ .map(JsonContactAddress::from)
+ .collect(Collectors.toList()) : null;
+
+ final var organization = contact.organization().orElse(null);
+
+ return new JsonSharedContact(name, avatar, phone, email, address, organization);
}
}