All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.hubspot.algebra.ResultDeserializer Maven / Gradle / Ivy

package com.hubspot.algebra;

import static com.hubspot.algebra.ResultModule.CASE_FIELD_NAME;
import static com.hubspot.algebra.ResultModule.ERROR_FIELD_NAME;

import java.io.IOException;

import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JavaType;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.deser.std.StdDeserializer;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.hubspot.algebra.ResultModule.Case;

public class ResultDeserializer extends StdDeserializer> {
  private final Class okClass;
  private final Class errClass;

  public ResultDeserializer(JavaType valueType) {
    super(valueType);

    this.okClass = valueType.getBindings().getBoundType(0).getRawClass();
    this.errClass = valueType.getBindings().getBoundType(1).getRawClass();
  }

  @Override
  public Result deserialize(JsonParser p,
                                  DeserializationContext ctxt) throws IOException, JsonProcessingException {
    ObjectMapper objectMapper = ((ObjectMapper) p.getCodec());
    ObjectNode node = objectMapper.readTree(p);
    String resultCase = node.findValue(CASE_FIELD_NAME).textValue();
    node.remove(CASE_FIELD_NAME);

    if (resultCase.equalsIgnoreCase(Case.ERR.toString())) {
      if (node.has(ERROR_FIELD_NAME)) {
        Object err = objectMapper.treeToValue(node.findValue(ERROR_FIELD_NAME), errClass);
        return Results.err(err);
      }

      Object err = objectMapper.treeToValue(node, errClass);
      return Results.err(err);
    } else {
      Object ok = objectMapper.treeToValue(node, okClass);
      return Results.ok(ok);
    }
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy