package roomescape.payment.infrastructure.client import com.fasterxml.jackson.core.JsonParser import com.fasterxml.jackson.core.TreeNode import com.fasterxml.jackson.databind.DeserializationContext import com.fasterxml.jackson.databind.JsonNode import com.fasterxml.jackson.databind.deser.std.StdDeserializer import roomescape.payment.web.PaymentCancel import java.io.IOException import java.time.OffsetDateTime class PaymentCancelResponseDeserializer( vc: Class? = null ) : StdDeserializer(vc) { @Throws(IOException::class) override fun deserialize( jsonParser: JsonParser, deserializationContext: DeserializationContext? ): PaymentCancel.Response { val cancels: JsonNode = jsonParser.codec.readTree(jsonParser) .get("cancels") .get(0) as JsonNode return PaymentCancel.Response( cancels.get("cancelStatus").asText(), cancels.get("cancelReason").asText(), cancels.get("cancelAmount").asLong(), OffsetDateTime.parse(cancels.get("canceledAt").asText()) ) } }