X-Git-Url: https://git.nmode.ca/signal-cli/blobdiff_plain/641dc7577c58cf2c15e82a87a5d87623ef665e32..15e802971524cc061b72a1c5335140f517dd8f03:/src/main/java/org/asamk/signal/JsonWriterImpl.java diff --git a/src/main/java/org/asamk/signal/JsonWriterImpl.java b/src/main/java/org/asamk/signal/JsonWriterImpl.java new file mode 100644 index 00000000..772e4c7e --- /dev/null +++ b/src/main/java/org/asamk/signal/JsonWriterImpl.java @@ -0,0 +1,43 @@ +package org.asamk.signal; + +import com.fasterxml.jackson.annotation.JsonAutoDetect; +import com.fasterxml.jackson.annotation.PropertyAccessor; +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; + +import java.io.BufferedWriter; +import java.io.IOException; +import java.io.OutputStream; +import java.io.OutputStreamWriter; +import java.io.Writer; +import java.nio.charset.StandardCharsets; + +public class JsonWriterImpl implements JsonWriter { + + private final Writer writer; + private final ObjectMapper objectMapper; + + public JsonWriterImpl(final OutputStream outputStream) { + this.writer = new BufferedWriter(new OutputStreamWriter(outputStream, StandardCharsets.UTF_8)); + + objectMapper = new ObjectMapper(); + objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.PUBLIC_ONLY); + objectMapper.disable(JsonGenerator.Feature.AUTO_CLOSE_TARGET); + } + + public synchronized void write(final Object object) { + try { + try { + objectMapper.writeValue(writer, object); + } catch (JsonProcessingException e) { + // Some issue with json serialization, probably caused by a bug + throw new AssertionError(e); + } + writer.write(System.lineSeparator()); + writer.flush(); + } catch (IOException e) { + throw new AssertionError(e); + } + } +}