summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHåkon Hallingstad <hakon@yahooinc.com>2022-10-27 11:59:02 +0200
committerHåkon Hallingstad <hakon@yahooinc.com>2022-10-27 11:59:02 +0200
commitebb012782ad822f352ec6d3539cc34102690fdb9 (patch)
tree65806cc2518479b3f9ddb628cf9593a697bf8a24
parenta66a1de44e52ba53ef49810e49ddce6721693512 (diff)
Add some String utils in SlimeUtils
-rw-r--r--vespajlib/src/main/java/com/yahoo/io/IOUtils.java2
-rw-r--r--vespajlib/src/main/java/com/yahoo/slime/SlimeUtils.java92
2 files changed, 40 insertions, 54 deletions
diff --git a/vespajlib/src/main/java/com/yahoo/io/IOUtils.java b/vespajlib/src/main/java/com/yahoo/io/IOUtils.java
index 81e1306b29e..699ac22d278 100644
--- a/vespajlib/src/main/java/com/yahoo/io/IOUtils.java
+++ b/vespajlib/src/main/java/com/yahoo/io/IOUtils.java
@@ -413,7 +413,7 @@ public abstract class IOUtils {
/** Read an input stream completely into a string */
public static String readAll(InputStream stream, Charset charset) throws IOException {
- return readAll(new InputStreamReader(stream, charset));
+ return new String(stream.readAllBytes(), charset);
}
/** Convenience method for closing a list of readers. Does nothing if the given reader list is null. */
diff --git a/vespajlib/src/main/java/com/yahoo/slime/SlimeUtils.java b/vespajlib/src/main/java/com/yahoo/slime/SlimeUtils.java
index c36b001d056..e3da9fc5673 100644
--- a/vespajlib/src/main/java/com/yahoo/slime/SlimeUtils.java
+++ b/vespajlib/src/main/java/com/yahoo/slime/SlimeUtils.java
@@ -3,6 +3,7 @@ package com.yahoo.slime;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
+import java.io.UncheckedIOException;
import java.nio.charset.StandardCharsets;
import java.time.Duration;
import java.time.Instant;
@@ -16,6 +17,8 @@ import java.util.Spliterators;
import java.util.stream.Stream;
import java.util.stream.StreamSupport;
+import static com.yahoo.yolean.Exceptions.uncheck;
+
/**
* Extra utilities/operations on slime trees.
*
@@ -31,34 +34,16 @@ public class SlimeUtils {
}
- private static void setObjectEntry(Inspector from, String name, Cursor to) {
+ public static void setObjectEntry(Inspector from, String name, Cursor to) {
switch (from.type()) {
- case NIX:
- to.setNix(name);
- break;
- case BOOL:
- to.setBool(name, from.asBool());
- break;
- case LONG:
- to.setLong(name, from.asLong());
- break;
- case DOUBLE:
- to.setDouble(name, from.asDouble());
- break;
- case STRING:
- to.setString(name, from.asString());
- break;
- case DATA:
- to.setData(name, from.asData());
- break;
- case ARRAY:
- Cursor array = to.setArray(name);
- copyArray(from, array);
- break;
- case OBJECT:
- Cursor object = to.setObject(name);
- copyObject(from, object);
- break;
+ case NIX -> to.setNix(name);
+ case BOOL -> to.setBool(name, from.asBool());
+ case LONG -> to.setLong(name, from.asLong());
+ case DOUBLE -> to.setDouble(name, from.asDouble());
+ case STRING -> to.setString(name, from.asString());
+ case DATA -> to.setData(name, from.asData());
+ case ARRAY -> copyArray(from, to.setArray(name));
+ case OBJECT -> copyObject(from, to.setObject(name));
}
}
@@ -71,32 +56,14 @@ public class SlimeUtils {
private static void addValue(Inspector from, Cursor to) {
switch (from.type()) {
- case NIX:
- to.addNix();
- break;
- case BOOL:
- to.addBool(from.asBool());
- break;
- case LONG:
- to.addLong(from.asLong());
- break;
- case DOUBLE:
- to.addDouble(from.asDouble());
- break;
- case STRING:
- to.addString(from.asString());
- break;
- case DATA:
- to.addData(from.asData());
- break;
- case ARRAY:
- Cursor array = to.addArray();
- copyArray(from, array);
- break;
- case OBJECT:
- Cursor object = to.addObject();
- copyObject(from, object);
- break;
+ case NIX -> to.addNix();
+ case BOOL -> to.addBool(from.asBool());
+ case LONG -> to.addLong(from.asLong());
+ case DOUBLE -> to.addDouble(from.asDouble());
+ case STRING -> to.addString(from.asString());
+ case DATA -> to.addData(from.asData());
+ case ARRAY -> copyArray(from, to.addArray());
+ case OBJECT -> copyObject(from, to.addObject());
}
}
@@ -115,6 +82,25 @@ public class SlimeUtils {
return baos.toByteArray();
}
+ public static String toJson(Slime slime) throws UncheckedIOException {
+ return toJson(slime.get());
+ }
+
+ public static String toJson(Inspector inspector) {
+ return toJson(inspector, true);
+ }
+
+ public static String toJson(Inspector inspector, boolean compact) {
+ var outputStream = new ByteArrayOutputStream();
+ var jsonFormat = new JsonFormat(compact ? 0 : 2);
+ uncheck(() -> jsonFormat.encode(outputStream, inspector));
+ return outputStream.toString(StandardCharsets.UTF_8);
+ }
+
+ public static String toPrettyJson(String json) {
+ return toJson(jsonToSlimeOrThrow(json).get(), false);
+ }
+
public static Slime jsonToSlime(byte[] json) {
Slime slime = new Slime();
new JsonDecoder().decode(slime, json);