001package net.bramp.ffmpeg.adapter;
002
003import com.google.gson.JsonDeserializationContext;
004import com.google.gson.JsonDeserializer;
005import com.google.gson.JsonElement;
006import com.google.gson.JsonParseException;
007import java.lang.reflect.Type;
008
009/** Gson type adapter that deserializes booleans from both boolean and integer JSON values. */
010public class BooleanTypeAdapter implements JsonDeserializer<Boolean> {
011  @Override
012  public Boolean deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
013      throws JsonParseException {
014    if (json.isJsonPrimitive() && json.getAsJsonPrimitive().isBoolean()) {
015      return json.getAsBoolean();
016    }
017
018    if (json.isJsonPrimitive() && json.getAsJsonPrimitive().isString()) {
019      String jsonValue = json.getAsString();
020      if (jsonValue.equalsIgnoreCase("true")) {
021        return true;
022      } else if (jsonValue.equalsIgnoreCase("false")) {
023        return false;
024      } else {
025        return null;
026      }
027    }
028
029    return json.getAsInt() != 0;
030  }
031}