package denominator.denominatord;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.stream.JsonWriter;
import com.squareup.okhttp.mockwebserver.MockResponse;
import com.squareup.okhttp.mockwebserver.RecordedRequest;
import java.io.IOException;
import java.io.StringWriter;
import java.util.Iterator;
class JsonCodec {
private final Gson json;
JsonCodec() {
this.json = new GsonBuilder().setPrettyPrinting().create();
}
<T> T readJson(RecordedRequest request, Class<T> clazz) {
return json.fromJson(request.getUtf8Body(), clazz);
}
<T> MockResponse toJsonArray(Iterator<T> elements) {
elements.hasNext(); // defensive to make certain error cases eager.
StringWriter out = new StringWriter(); // MWS cannot do streaming responses.
try {
JsonWriter writer = new JsonWriter(out);
writer.setIndent(" ");
writer.beginArray();
while (elements.hasNext()) {
Object next = elements.next();
json.toJson(next, next.getClass(), writer);
}
writer.endArray();
writer.flush();
} catch (IOException e) {
throw new RuntimeException(e);
}
return new MockResponse().setResponseCode(200)
.addHeader("Content-Type", "application/json")
.setBody(out.toString() + "\n"); // curl nice
}
}