package io.gitlab.jfronny.respackopts.gson; import io.gitlab.jfronny.gson.*; import io.gitlab.jfronny.muscript.StarScriptIngester; import io.gitlab.jfronny.muscript.ast.Expr; import io.gitlab.jfronny.muscript.compiler.Parser; import java.lang.reflect.Type; import java.util.HashMap; import java.util.Map; public class ExprDeserializer implements JsonDeserializer> { private static final Map> compiledScripts = new HashMap<>(); @Override public Expr deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { if (json.isJsonPrimitive() && json.getAsJsonPrimitive().isString()) { String s = json.getAsJsonPrimitive().getAsString(); if (compiledScripts.containsKey(s)) return compiledScripts.get(s); try { Expr expr = Parser.parse(AttachmentHolder.getAttachedVersion() <= 7 ? StarScriptIngester.starScriptToMu(s) : s); compiledScripts.put(s, expr); return expr; } catch (Parser.ParseException e) { throw new JsonParseException("Could not create script", e); } } else { throw new JsonParseException("Could not parse script: Expected string"); } } }