001package net.bramp.ffmpeg.adapter;
002
003import com.google.gson.*;
004import java.lang.reflect.AnnotatedType;
005import java.lang.reflect.Field;
006import java.lang.reflect.Type;
007import net.bramp.ffmpeg.probe.FFmpegStream;
008
009public class FFmpegStreamSideDataAdapter implements JsonDeserializer<FFmpegStream.SideData> {
010  @Override
011  public FFmpegStream.SideData deserialize(
012      JsonElement jsonElement, Type type, JsonDeserializationContext jsonDeserializationContext)
013      throws JsonParseException {
014    if (!(jsonElement instanceof JsonObject)) return null;
015    try {
016      Object sideData =
017          Class.forName(FFmpegStream.SideData.class.getName()).getConstructor().newInstance();
018      Field[] fields = Class.forName(FFmpegStream.SideData.class.getName()).getFields();
019      for (Field field : fields) {
020        String fieldName = field.getName();
021        AnnotatedType annotatedType = field.getAnnotatedType();
022        Object deserialize =
023            jsonDeserializationContext.deserialize(
024                ((JsonObject) jsonElement).get(fieldName), annotatedType.getType());
025        field.set(sideData, deserialize);
026      }
027      return (FFmpegStream.SideData) sideData;
028    } catch (Exception exception) {
029      return null;
030    }
031  }
032}