]> nmode's Git Repositories - signal-cli/blob - src/main/java/org/asamk/signal/JsonWriter.java
20cf7bc15b992fba15e01845e8b46eb4f93e4adf
[signal-cli] / src / main / java / org / asamk / signal / JsonWriter.java
1 package org.asamk.signal;
2
3 import com.fasterxml.jackson.annotation.JsonAutoDetect;
4 import com.fasterxml.jackson.annotation.PropertyAccessor;
5 import com.fasterxml.jackson.core.JsonGenerator;
6 import com.fasterxml.jackson.core.JsonProcessingException;
7 import com.fasterxml.jackson.databind.ObjectMapper;
8
9 import java.io.BufferedWriter;
10 import java.io.IOException;
11 import java.io.OutputStream;
12 import java.io.OutputStreamWriter;
13 import java.io.Writer;
14 import java.nio.charset.StandardCharsets;
15
16 public class JsonWriter {
17
18 private final Writer writer;
19 private final ObjectMapper objectMapper;
20
21 public JsonWriter(final OutputStream outputStream) {
22 this.writer = new BufferedWriter(new OutputStreamWriter(outputStream, StandardCharsets.UTF_8));
23
24 objectMapper = new ObjectMapper();
25 objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.PUBLIC_ONLY);
26 objectMapper.disable(JsonGenerator.Feature.AUTO_CLOSE_TARGET);
27 }
28
29 public void write(final Object object) {
30 try {
31 try {
32 objectMapper.writeValue(writer, object);
33 } catch (JsonProcessingException e) {
34 // Some issue with json serialization, probably caused by a bug
35 throw new AssertionError(e);
36 }
37 writer.write(System.lineSeparator());
38 writer.flush();
39 } catch (IOException e) {
40 throw new AssertionError(e);
41 }
42 }
43 }