1package dev.rafex.ether.http.jetty12;
29import java.nio.ByteBuffer;
30import java.nio.charset.StandardCharsets;
31import java.util.Objects;
33import org.eclipse.jetty.server.Response;
34import org.eclipse.jetty.util.Callback;
36import dev.rafex.ether.json.JsonCodec;
38final class JettyResponseUtil {
40 private JettyResponseUtil() {
43 static void json(
final Response response,
final Callback callback,
final JsonCodec codec,
final int status,
46 jsonOrThrow(response, callback, codec, status, body);
47 }
catch (
final JettyTransportException e) {
48 throw new JettyTransportRuntimeException(
"Error writing JSON response", e);
52 static void jsonOrThrow(
final Response response,
final Callback callback,
final JsonCodec codec,
final int status,
53 final Object body)
throws JettyTransportException {
54 response.setStatus(status);
55 response.getHeaders().put(
"content-type",
"application/json; charset=utf-8");
56 final var jsonBody = toJsonBody(codec, body);
57 writeUtf8(response, callback, jsonBody);
60 static void text(
final Response response,
final Callback callback,
final int status,
final String body) {
61 response.setStatus(status);
62 response.getHeaders().put(
"content-type",
"text/plain; charset=utf-8");
63 writeUtf8(response, callback, body ==
null ?
"" : body);
66 static void noContent(
final Response response,
final Callback callback,
final int status) {
67 response.setStatus(status);
71 private static void writeUtf8(
final Response response,
final Callback callback,
final String body) {
72 final var bytes = body.getBytes(StandardCharsets.UTF_8);
73 response.write(
true, ByteBuffer.wrap(bytes), callback);
76 private static String toJsonBody(
final JsonCodec codec,
final Object body)
throws JettyTransportException {
77 if (body instanceof
final String s) {
81 return Objects.requireNonNull(codec).toJson(body);
82 }
catch (
final RuntimeException e) {
83 throw new JettyTransportException(
"Error serializing JSON payload", e);