🚧 Add JSON filter
[rhynodge.git] / src / main / kotlin / net / pterodactylus / rhynodge / filters / JsonFilter.kt
1 package net.pterodactylus.rhynodge.filters
2
3 import com.fasterxml.jackson.core.JsonParseException
4 import com.fasterxml.jackson.databind.ObjectMapper
5 import net.pterodactylus.rhynodge.Filter
6 import net.pterodactylus.rhynodge.State
7 import net.pterodactylus.rhynodge.states.FailedState
8 import net.pterodactylus.rhynodge.states.HttpState
9 import net.pterodactylus.rhynodge.states.JsonState
10
11 class JsonFilter : Filter {
12
13         override fun filter(state: State): State {
14                 if (state is FailedState) {
15                         return state
16                 }
17                 val httpState = state as? HttpState ?: throw IllegalArgumentException("state must be HttpState")
18                 val jsonNode = try {
19                         objectMapper.readTree(httpState.rawResult())
20                 } catch (jsonParseException: JsonParseException) {
21                         return FailedState(jsonParseException)
22                 }
23                 return JsonState(jsonNode)
24         }
25
26 }
27
28 private val objectMapper = ObjectMapper()