🚧 Add JSON filter
[rhynodge.git] / src / main / kotlin / net / pterodactylus / rhynodge / filters / JsonFilter.kt
diff --git a/src/main/kotlin/net/pterodactylus/rhynodge/filters/JsonFilter.kt b/src/main/kotlin/net/pterodactylus/rhynodge/filters/JsonFilter.kt
new file mode 100644 (file)
index 0000000..502a002
--- /dev/null
@@ -0,0 +1,28 @@
+package net.pterodactylus.rhynodge.filters
+
+import com.fasterxml.jackson.core.JsonParseException
+import com.fasterxml.jackson.databind.ObjectMapper
+import net.pterodactylus.rhynodge.Filter
+import net.pterodactylus.rhynodge.State
+import net.pterodactylus.rhynodge.states.FailedState
+import net.pterodactylus.rhynodge.states.HttpState
+import net.pterodactylus.rhynodge.states.JsonState
+
+class JsonFilter : Filter {
+
+       override fun filter(state: State): State {
+               if (state is FailedState) {
+                       return state
+               }
+               val httpState = state as? HttpState ?: throw IllegalArgumentException("state must be HttpState")
+               val jsonNode = try {
+                       objectMapper.readTree(httpState.rawResult())
+               } catch (jsonParseException: JsonParseException) {
+                       return FailedState(jsonParseException)
+               }
+               return JsonState(jsonNode)
+       }
+
+}
+
+private val objectMapper = ObjectMapper()