Skip to content

Commit 676c6f2

Browse files
committed
Create JsonSerializer
1 parent 0adb407 commit 676c6f2

File tree

10 files changed

+62
-22
lines changed

10 files changed

+62
-22
lines changed

src/main/java/org/visuals/legacy/lightconfig/lib/v1/Config.java

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -24,31 +24,40 @@
2424

2525
package org.visuals.legacy.lightconfig.lib.v1;
2626

27-
import com.google.gson.*;
27+
import com.google.gson.JsonElement;
28+
import com.google.gson.JsonObject;
2829
import net.fabricmc.loader.api.ModContainer;
2930
import net.minecraft.client.gui.screens.Screen;
3031
import org.jetbrains.annotations.Nullable;
3132
import org.slf4j.Logger;
3233
import org.slf4j.LoggerFactory;
3334
import org.visuals.legacy.lightconfig.lib.v1.field.*;
35+
import org.visuals.legacy.lightconfig.lib.v1.serializer.ConfigSerializer;
36+
import org.visuals.legacy.lightconfig.lib.v1.serializer.JsonSerializer;
3437

3538
import java.nio.file.Files;
3639
import java.nio.file.Path;
3740
import java.util.ArrayList;
3841
import java.util.List;
3942

4043
public abstract class Config {
41-
protected static final Gson GSON = new GsonBuilder().setPrettyPrinting().setStrictness(Strictness.LENIENT).create();
4244
protected final Logger logger = LoggerFactory.getLogger(this.getClass());
4345
protected final List<AbstractConfigField<?>> configFields = new ArrayList<>();
4446
protected final ModContainer modContainer;
4547
protected final Path path;
46-
protected final ConfigSerializer<? extends JsonElement> serializer;
48+
protected final ConfigSerializer<?> serializer;
4749

48-
public Config(ModContainer modContainer, Path path) {
50+
public Config(ModContainer modContainer, Path path, ConfigSerializer<?> serializer) {
4951
this.modContainer = modContainer;
5052
this.path = path;
51-
this.serializer = new ConfigSerializer<>();
53+
this.serializer = serializer;
54+
if (!(this.serializer instanceof JsonSerializer)) {
55+
throw new RuntimeException("Only json serialization is currently supported! Please use JsonSerializer!");
56+
}
57+
}
58+
59+
public Config(ModContainer modContainer, Path path) {
60+
this(modContainer, path, null);
5261
}
5362

5463
public BooleanConfigField booleanFieldOf(final String name, final boolean defaultValue) {
@@ -84,7 +93,7 @@ public void load() {
8493

8594
try {
8695
final String json = Files.readString(this.path);
87-
final JsonObject object = GSON.fromJson(json, JsonObject.class);
96+
final JsonObject object = ((JsonElement) this.serializer.deserialize(json)).getAsJsonObject();
8897
if (object == null) {
8998
this.logger.warn("Failed to load config! Defaulting to original settings.");
9099
} else {
@@ -115,7 +124,7 @@ public void save() {
115124
});
116125

117126
try {
118-
Files.write(this.path, GSON.toJson(object).getBytes());
127+
Files.write(this.path, ((JsonSerializer) this.serializer).serialize(object));
119128
} catch (Exception ignored) {
120129
this.logger.warn("Failed to save config!");
121130
return;
@@ -130,8 +139,6 @@ public void reset() {
130139
this.save();
131140
}
132141

133-
public abstract Screen getConfigScreen(@Nullable Screen parent);
134-
135142
public Logger getLogger() {
136143
return logger;
137144
}
@@ -147,4 +154,6 @@ public ModContainer getModContainer() {
147154
public Path getPath() {
148155
return path;
149156
}
157+
158+
public abstract Screen getConfigScreen(@Nullable Screen parent);
150159
}

src/main/java/org/visuals/legacy/lightconfig/lib/v1/ConfigSerializer.java renamed to src/main/java/org/visuals/legacy/lightconfig/lib/v1/serializer/ConfigSerializer.java

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,12 @@
2222
* "MINECRAFT" LINKING EXCEPTION TO THE GPL
2323
*/
2424

25-
package org.visuals.legacy.lightconfig.lib.v1;
25+
package org.visuals.legacy.lightconfig.lib.v1.serializer;
2626

27-
// TODO
28-
public class ConfigSerializer<T> {
29-
public void read(T value) {
30-
}
27+
import org.jetbrains.annotations.Nullable;
3128

32-
public void write(T value) {
33-
}
29+
public abstract class ConfigSerializer<T> {
30+
public abstract @Nullable T deserialize(Object value);
31+
32+
public abstract byte[] serialize(T value);
3433
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package org.visuals.legacy.lightconfig.lib.v1.serializer;
2+
3+
import com.google.gson.Gson;
4+
import com.google.gson.GsonBuilder;
5+
import com.google.gson.JsonElement;
6+
import com.google.gson.Strictness;
7+
8+
public class JsonSerializer extends ConfigSerializer<JsonElement> {
9+
protected static final Gson GSON = new GsonBuilder().setPrettyPrinting().setStrictness(Strictness.LENIENT).create();
10+
11+
@Override
12+
public JsonElement deserialize(Object value) {
13+
if (!(value instanceof String string)) {
14+
return null;
15+
} else {
16+
return GSON.fromJson(string, JsonElement.class);
17+
}
18+
}
19+
20+
@Override
21+
public byte[] serialize(JsonElement value) {
22+
if (value == null) {
23+
throw new RuntimeException("Cannot serialize null!");
24+
} else {
25+
return GSON.toJson(value).getBytes();
26+
}
27+
}
28+
}

src/main/java/org/visuals/legacy/lightconfig/lib/v1/type/BooleanType.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,5 +24,5 @@
2424

2525
package org.visuals.legacy.lightconfig.lib.v1.type;
2626

27-
public class BooleanType {
27+
public class BooleanType extends Type {
2828
}

src/main/java/org/visuals/legacy/lightconfig/lib/v1/type/DoubleType.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,5 +24,5 @@
2424

2525
package org.visuals.legacy.lightconfig.lib.v1.type;
2626

27-
public class DoubleType {
27+
public class DoubleType extends Type {
2828
}

src/main/java/org/visuals/legacy/lightconfig/lib/v1/type/FloatType.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,5 +24,5 @@
2424

2525
package org.visuals.legacy.lightconfig.lib.v1.type;
2626

27-
public class FloatType {
27+
public class FloatType extends Type {
2828
}

src/main/java/org/visuals/legacy/lightconfig/lib/v1/type/IntegerType.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,5 +24,5 @@
2424

2525
package org.visuals.legacy.lightconfig.lib.v1.type;
2626

27-
public class IntegerType {
27+
public class IntegerType extends Type {
2828
}

src/main/java/org/visuals/legacy/lightconfig/lib/v1/type/LongType.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,5 +24,5 @@
2424

2525
package org.visuals.legacy.lightconfig.lib.v1.type;
2626

27-
public class LongType {
27+
public class LongType extends Type {
2828
}

src/main/java/org/visuals/legacy/lightconfig/lib/v1/type/StringType.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,5 +24,5 @@
2424

2525
package org.visuals.legacy.lightconfig.lib.v1.type;
2626

27-
public class StringType {
27+
public class StringType extends Type {
2828
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
package org.visuals.legacy.lightconfig.lib.v1.type;
2+
3+
public class Type {
4+
}

0 commit comments

Comments
 (0)