package chylex.bettercontrols.config; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.JsonDeserializationContext; import com.google.gson.JsonDeserializer; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParseException; import com.google.gson.JsonSerializationContext; import com.google.gson.JsonSerializer; import com.google.gson.stream.JsonReader; import com.google.gson.stream.JsonWriter; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import java.io.FileNotFoundException; import java.io.IOException; import java.lang.reflect.Type; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.NoSuchFileException; import java.nio.file.Path; final class ConfigSerializer implements JsonSerializer, JsonDeserializer{ private static final Logger logger = LogManager.getLogger(); private static final Gson gson = new GsonBuilder().registerTypeAdapter(BetterControlsConfig.class, new ConfigSerializer()).setPrettyPrinting().create(); private ConfigSerializer(){} @Override public JsonElement serialize(final BetterControlsConfig cfg, final Type typeOfSrc, final JsonSerializationContext context){ final JsonObject obj = new JsonObject(); return obj; } @Override public BetterControlsConfig deserialize(final JsonElement json, final Type typeOfT, final JsonDeserializationContext context) throws JsonParseException{ final BetterControlsConfig cfg = new BetterControlsConfig(); final JsonObject obj = json.getAsJsonObject(); return cfg; } static void serialize(final Path path, final BetterControlsConfig config){ try(final JsonWriter writer = gson.newJsonWriter(Files.newBufferedWriter(path, StandardCharsets.UTF_8))){ gson.getAdapter(BetterControlsConfig.class).write(writer, config); }catch(final IOException e){ logger.error("Error saving BetterControls configuration file!", e); } } static BetterControlsConfig deserialize(final Path path){ try(final JsonReader jsonReader = new JsonReader(Files.newBufferedReader(path, StandardCharsets.UTF_8))){ return gson.getAdapter(BetterControlsConfig.class).read(jsonReader); }catch(final FileNotFoundException | NoSuchFileException ignored){ }catch(final IOException e){ logger.error("Error reading BetterControls configuration file!", e); } return new BetterControlsConfig(); } }