package io.gitlab.jfronny.respackopts.gson; import com.google.gson.*; import io.gitlab.jfronny.respackopts.Respackopts; import io.gitlab.jfronny.respackopts.model.DirRpo; import io.gitlab.jfronny.respackopts.model.condition.Condition; import java.lang.reflect.Type; import java.util.Map; public class DirRpoDeserializer implements JsonDeserializer { @Override public DirRpo deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { if (!json.isJsonObject()) throw new JsonParseException("Rpo must be a json object"); DirRpo rpo = new DirRpo(); for (Map.Entry entry : json.getAsJsonObject().entrySet()) { switch (entry.getKey()) { case "conditions", "condition" -> rpo.conditions = context.deserialize(entry.getValue(), Condition.class); case "fallbacks", "fallback" -> { if (entry.getValue().isJsonPrimitive() && entry.getValue().getAsJsonPrimitive().isString()) { rpo.fallback = entry.getValue().getAsString(); } else { throw new JsonParseException("Directory .rpos only support a single fallback"); } } } } return rpo; } }