Skip to content

Commit 0e7628d

Browse files
authored
Merge pull request #173 from Mechite/add-config-toml
Implement support for most TOML types
2 parents 94d1ffe + 7665caa commit 0e7628d

File tree

2 files changed

+50
-13
lines changed

2 files changed

+50
-13
lines changed

avaje-config-toml/src/main/java/io/avaje/config/toml/TomlParser.java

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import io.avaje.config.ConfigParser;
44
import org.jspecify.annotations.NullMarked;
55
import org.tomlj.Toml;
6+
import org.tomlj.TomlArray;
67

78
import java.io.IOException;
89
import java.io.InputStream;
@@ -26,7 +27,7 @@ public Map<String, String> load(Reader reader) {
2627
try {
2728
return Toml.parse(reader).dottedEntrySet()
2829
.stream()
29-
.collect(Collectors.toMap(Map.Entry::getKey, entry -> String.valueOf(entry.getValue())));
30+
.collect(Collectors.toMap(Map.Entry::getKey, entry -> readTomlValue(entry.getValue())));
3031
} catch (IOException exception) {
3132
throw new UncheckedIOException(exception);
3233
}
@@ -37,9 +38,19 @@ public Map<String, String> load(InputStream is) {
3738
try {
3839
return Toml.parse(is).dottedEntrySet()
3940
.stream()
40-
.collect(Collectors.toMap(Map.Entry::getKey, entry -> String.valueOf(entry.getValue())));
41+
.collect(Collectors.toMap(Map.Entry::getKey, entry -> readTomlValue(entry.getValue())));
4142
} catch (IOException exception) {
4243
throw new UncheckedIOException(exception);
4344
}
4445
}
46+
47+
private static String readTomlValue(Object object) {
48+
if (object instanceof TomlArray) {
49+
TomlArray array = (TomlArray) object;
50+
return array.toList().stream()
51+
.map(TomlParser::readTomlValue)
52+
.collect(Collectors.joining(";"));
53+
}
54+
return String.valueOf(object);
55+
}
4556
}

avaje-config-toml/src/test/java/io/avaje/config/toml/TomlParserTest.java

Lines changed: 37 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -18,34 +18,60 @@ void supportedExtensions() {
1818
}
1919

2020
private static String input() {
21-
return "key3 = \"c\"\n" +
21+
return "key = \"c\"\n" +
2222
"\n" +
2323
"[one]\n" +
24-
"key = \"a\"\n" +
25-
"key2 = \"b\"\n";
24+
"key1 = \"a\"\n" +
25+
"key2 = \"b\"\n" +
26+
"key3 = [\"a\", \"b\", \"c\"]\n" +
27+
"[two]\n" +
28+
"local_datetime = 2024-09-09T15:30:00\n" +
29+
"local_date = 2024-09-09\n" +
30+
"local_time = 15:30:00\n" +
31+
"offset_datetime = 2024-09-09T15:30:00+02:00";
2632
}
2733

2834
@Test
2935
void load_reader() {
3036
var parser = new TomlParser();
3137
Map<String, String> map = parser.load(new StringReader(input()));
3238

33-
assertThat(map).hasSize(3);
34-
assertThat(map).containsOnlyKeys("one.key", "one.key2", "key3");
35-
assertThat(map).containsEntry("one.key", "a");
39+
assertThat(map).hasSize(8);
40+
assertThat(map).containsOnlyKeys("key",
41+
"one.key1", "one.key2", "one.key3",
42+
"two.local_datetime", "two.local_date", "two.local_time", "two.offset_datetime");
43+
44+
assertThat(map).containsEntry("key", "c");
45+
46+
assertThat(map).containsEntry("one.key1", "a");
3647
assertThat(map).containsEntry("one.key2", "b");
37-
assertThat(map).containsEntry("key3", "c");
48+
assertThat(map).containsEntry("one.key3", "a;b;c");
49+
50+
assertThat(map).containsEntry("two.local_datetime", "2024-09-09T15:30");
51+
assertThat(map).containsEntry("two.local_date", "2024-09-09");
52+
assertThat(map).containsEntry("two.local_time", "15:30");
53+
assertThat(map).containsEntry("two.offset_datetime", "2024-09-09T15:30+02:00");
3854
}
3955

4056
@Test
4157
void load_inputStream() {
4258
var parser = new TomlParser();
4359
Map<String, String> map = parser.load(new ByteArrayInputStream(input().getBytes(StandardCharsets.UTF_8)));
4460

45-
assertThat(map).hasSize(3);
46-
assertThat(map).containsOnlyKeys("one.key", "one.key2", "key3");
47-
assertThat(map).containsEntry("one.key", "a");
61+
assertThat(map).hasSize(8);
62+
assertThat(map).containsOnlyKeys("key",
63+
"one.key1", "one.key2", "one.key3",
64+
"two.local_datetime", "two.local_date", "two.local_time", "two.offset_datetime");
65+
66+
assertThat(map).containsEntry("key", "c");
67+
68+
assertThat(map).containsEntry("one.key1", "a");
4869
assertThat(map).containsEntry("one.key2", "b");
49-
assertThat(map).containsEntry("key3", "c");
70+
assertThat(map).containsEntry("one.key3", "a;b;c");
71+
72+
assertThat(map).containsEntry("two.local_datetime", "2024-09-09T15:30");
73+
assertThat(map).containsEntry("two.local_date", "2024-09-09");
74+
assertThat(map).containsEntry("two.local_time", "15:30");
75+
assertThat(map).containsEntry("two.offset_datetime", "2024-09-09T15:30+02:00");
5076
}
5177
}

0 commit comments

Comments
 (0)