Restructure, rename, modularize.

Change-Id: I4aa6cfb486fe002cf65405ec9c2876e3114aaf46
diff --git a/runtime/src/main/java/eu/mulk/quarkus/googlecloud/jsonlogging/KeyValueParameter.java b/runtime/src/main/java/eu/mulk/quarkus/googlecloud/jsonlogging/KeyValueParameter.java
new file mode 100644
index 0000000..5f582c9
--- /dev/null
+++ b/runtime/src/main/java/eu/mulk/quarkus/googlecloud/jsonlogging/KeyValueParameter.java
@@ -0,0 +1,43 @@
+package eu.mulk.quarkus.googlecloud.jsonlogging;
+
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import javax.json.Json;
+import javax.json.JsonObjectBuilder;
+import javax.json.JsonValue;
+
+public record KeyValueParameter(String key, JsonValue value) implements StructuredParameter {
+
+  public static KeyValueParameter of(String key, String value) {
+    return new KeyValueParameter(key, Json.createValue(value));
+  }
+
+  public static KeyValueParameter of(String key, int value) {
+    return new KeyValueParameter(key, Json.createValue(value));
+  }
+
+  public static KeyValueParameter of(String key, long value) {
+    return new KeyValueParameter(key, Json.createValue(value));
+  }
+
+  public static KeyValueParameter of(String key, double value) {
+    return new KeyValueParameter(key, Json.createValue(value));
+  }
+
+  public static KeyValueParameter of(String key, BigDecimal value) {
+    return new KeyValueParameter(key, Json.createValue(value));
+  }
+
+  public static KeyValueParameter of(String key, BigInteger value) {
+    return new KeyValueParameter(key, Json.createValue(value));
+  }
+
+  public static KeyValueParameter of(String key, boolean value) {
+    return new KeyValueParameter(key, value ? JsonValue.TRUE : JsonValue.FALSE);
+  }
+
+  @Override
+  public JsonObjectBuilder json() {
+    return Json.createObjectBuilder().add(key, value);
+  }
+}