--- /dev/null
+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()