Skip to content

Commit b63cca6

Browse files
committed
Fix serializing and deserializing empty config
1 parent 23f5be5 commit b63cca6

File tree

5 files changed

+27
-4
lines changed

5 files changed

+27
-4
lines changed

src/main/java/com/coditory/quark/config/ConfigFormat.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@
22

33
import com.google.gson.Gson;
44
import com.google.gson.GsonBuilder;
5+
import org.snakeyaml.engine.v2.api.Dump;
56
import org.snakeyaml.engine.v2.api.DumpSettings;
67
import org.snakeyaml.engine.v2.api.Load;
78
import org.snakeyaml.engine.v2.api.LoadSettings;
8-
import org.snakeyaml.engine.v2.api.Dump;
99
import org.snakeyaml.engine.v2.common.FlowStyle;
1010

1111
import java.io.ByteArrayInputStream;
@@ -93,7 +93,7 @@ public Config parse(String config) {
9393
LoadSettings settings = LoadSettings.builder().build();
9494
Load yaml = new Load(settings);
9595
Map<String, Object> map = (Map<String, Object>) yaml.loadFromString(config);
96-
return Config.of(map);
96+
return map == null || map.isEmpty() ? Config.empty() : Config.of(map);
9797
}
9898

9999
@SuppressWarnings("unchecked")
@@ -107,6 +107,7 @@ public Config parse(InputStream config) {
107107

108108
@Override
109109
public String stringify(Config config) {
110+
if (config.isEmpty()) return "";
110111
DumpSettings settings = DumpSettings.builder().setDefaultFlowStyle(FlowStyle.BLOCK).build();
111112
Dump dump = new Dump(settings);
112113
dump.dumpToString(config.toMap());
@@ -123,7 +124,7 @@ private static class JsonConfigParser implements ConfigFormatParser {
123124
@SuppressWarnings("unchecked")
124125
public Config parse(String config) {
125126
Map<String, Object> map = gson.fromJson(config, Map.class);
126-
return Config.of(map);
127+
return map == null || map.isEmpty() ? Config.empty() : Config.of(map);
127128
}
128129

129130
@Override
@@ -162,6 +163,7 @@ public Config parse(InputStream config) throws Exception {
162163

163164
@Override
164165
public String stringify(Config config) {
166+
if (config.isEmpty()) return "";
165167
return config.toFlatMap().entrySet().stream()
166168
.map(entry -> entry.getKey() + "=" + entry.getValue())
167169
.collect(joining("\n", "", "\n"));

src/main/java/com/coditory/quark/config/Preconditions.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public static <T> T expectNonNull(T value) {
3939

4040
public static <T> T expectNonNull(T value, String name) {
4141
if (value == null) {
42-
String message = message("Expected non-blank string", name);
42+
String message = message("Expected non-null", name);
4343
throw new IllegalArgumentException(message);
4444
}
4545
return value;

src/test/groovy/com/coditory/quark/config/format/ConfigJsonFormatSpec.groovy

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,4 +63,11 @@ class ConfigJsonFormatSpec extends Specification {
6363
then:
6464
result.getStringList("f") == ["F0", "F1"]
6565
}
66+
67+
def "should serialize and deserialize empty config"() {
68+
expect:
69+
ConfigFactory.parseJson("") == Config.empty()
70+
and:
71+
ConfigFormatter.toJson(Config.empty()) == "{}"
72+
}
6673
}

src/test/groovy/com/coditory/quark/config/format/ConfigPropertiesFormatSpec.groovy

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,4 +58,11 @@ class ConfigPropertiesFormatSpec extends Specification {
5858
then:
5959
result.getStringList("f") == ["F0", "F1"]
6060
}
61+
62+
def "should serialize and deserialize empty config"() {
63+
expect:
64+
ConfigFactory.parseProperties("") == Config.empty()
65+
and:
66+
ConfigFormatter.toProperties(Config.empty()) == ""
67+
}
6168
}

src/test/groovy/com/coditory/quark/config/format/ConfigYamlFormatSpec.groovy

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,4 +61,11 @@ class ConfigYamlFormatSpec extends Specification {
6161
then:
6262
result.getStringList("f") == ["F0", "F1"]
6363
}
64+
65+
def "should serialize and deserialize empty config"() {
66+
expect:
67+
ConfigFactory.parseYaml("") == Config.empty()
68+
and:
69+
ConfigFormatter.toYaml(Config.empty()) == ""
70+
}
6471
}

0 commit comments

Comments
 (0)