Skip to content

Commit 94d1ffe

Browse files
authored
Merge pull request #172 from Mechite/add-config-toml
Add avaje-config-toml
2 parents e82471a + da92971 commit 94d1ffe

File tree

6 files changed

+169
-0
lines changed

6 files changed

+169
-0
lines changed

avaje-config-toml/pom.xml

+59
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
3+
<modelVersion>4.0.0</modelVersion>
4+
<parent>
5+
<groupId>org.avaje</groupId>
6+
<artifactId>java11-oss</artifactId>
7+
<version>4.4</version>
8+
<relativePath/>
9+
</parent>
10+
11+
<groupId>io.avaje</groupId>
12+
<artifactId>avaje-config-toml</artifactId>
13+
<version>4.1-SNAPSHOT</version>
14+
15+
<scm>
16+
<connection>scm:git:[email protected]:avaje/avaje-config.git</connection>
17+
<developerConnection>scm:git:[email protected]:avaje/avaje-config.git</developerConnection>
18+
<tag>HEAD</tag>
19+
</scm>
20+
21+
<properties>
22+
<surefire.useModulePath>false</surefire.useModulePath>
23+
</properties>
24+
25+
<dependencies>
26+
<dependency>
27+
<groupId>io.avaje</groupId>
28+
<artifactId>avaje-config</artifactId>
29+
<version>${project.version}</version>
30+
</dependency>
31+
<dependency>
32+
<groupId>org.tomlj</groupId>
33+
<artifactId>tomlj</artifactId>
34+
<version>1.1.1</version>
35+
</dependency>
36+
37+
<dependency>
38+
<groupId>io.avaje</groupId>
39+
<artifactId>junit</artifactId>
40+
<version>1.5</version>
41+
<scope>test</scope>
42+
</dependency>
43+
44+
<dependency>
45+
<groupId>ch.qos.logback</groupId>
46+
<artifactId>logback-classic</artifactId>
47+
<version>1.5.7</version>
48+
<scope>test</scope>
49+
</dependency>
50+
51+
<dependency>
52+
<groupId>io.avaje</groupId>
53+
<artifactId>avaje-applog-slf4j</artifactId>
54+
<version>1.0</version>
55+
<scope>test</scope>
56+
</dependency>
57+
</dependencies>
58+
59+
</project>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package io.avaje.config.toml;
2+
3+
import io.avaje.config.ConfigParser;
4+
import org.jspecify.annotations.NullMarked;
5+
import org.tomlj.Toml;
6+
7+
import java.io.IOException;
8+
import java.io.InputStream;
9+
import java.io.Reader;
10+
import java.io.UncheckedIOException;
11+
import java.util.Map;
12+
import java.util.stream.Collectors;
13+
14+
@NullMarked
15+
public final class TomlParser implements ConfigParser {
16+
17+
private static final String[] extensions = {"toml"};
18+
19+
@Override
20+
public String[] supportedExtensions() {
21+
return extensions;
22+
}
23+
24+
@Override
25+
public Map<String, String> load(Reader reader) {
26+
try {
27+
return Toml.parse(reader).dottedEntrySet()
28+
.stream()
29+
.collect(Collectors.toMap(Map.Entry::getKey, entry -> String.valueOf(entry.getValue())));
30+
} catch (IOException exception) {
31+
throw new UncheckedIOException(exception);
32+
}
33+
}
34+
35+
@Override
36+
public Map<String, String> load(InputStream is) {
37+
try {
38+
return Toml.parse(is).dottedEntrySet()
39+
.stream()
40+
.collect(Collectors.toMap(Map.Entry::getKey, entry -> String.valueOf(entry.getValue())));
41+
} catch (IOException exception) {
42+
throw new UncheckedIOException(exception);
43+
}
44+
}
45+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import io.avaje.config.toml.TomlParser;
2+
3+
module io.avaje.config.toml {
4+
5+
requires io.avaje.config;
6+
requires org.tomlj;
7+
8+
exports io.avaje.config.toml;
9+
10+
provides io.avaje.config.ConfigExtension with TomlParser;
11+
12+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
io.avaje.config.toml.TomlParser
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package io.avaje.config.toml;
2+
3+
import org.junit.jupiter.api.Test;
4+
5+
import java.io.ByteArrayInputStream;
6+
import java.io.StringReader;
7+
import java.nio.charset.StandardCharsets;
8+
import java.util.Map;
9+
10+
import static org.assertj.core.api.Assertions.*;
11+
12+
class TomlParserTest {
13+
14+
@Test
15+
void supportedExtensions() {
16+
var parser = new TomlParser();
17+
assertThat(parser.supportedExtensions()).isEqualTo(new String[]{"toml"});
18+
}
19+
20+
private static String input() {
21+
return "key3 = \"c\"\n" +
22+
"\n" +
23+
"[one]\n" +
24+
"key = \"a\"\n" +
25+
"key2 = \"b\"\n";
26+
}
27+
28+
@Test
29+
void load_reader() {
30+
var parser = new TomlParser();
31+
Map<String, String> map = parser.load(new StringReader(input()));
32+
33+
assertThat(map).hasSize(3);
34+
assertThat(map).containsOnlyKeys("one.key", "one.key2", "key3");
35+
assertThat(map).containsEntry("one.key", "a");
36+
assertThat(map).containsEntry("one.key2", "b");
37+
assertThat(map).containsEntry("key3", "c");
38+
}
39+
40+
@Test
41+
void load_inputStream() {
42+
var parser = new TomlParser();
43+
Map<String, String> map = parser.load(new ByteArrayInputStream(input().getBytes(StandardCharsets.UTF_8)));
44+
45+
assertThat(map).hasSize(3);
46+
assertThat(map).containsOnlyKeys("one.key", "one.key2", "key3");
47+
assertThat(map).containsEntry("one.key", "a");
48+
assertThat(map).containsEntry("one.key2", "b");
49+
assertThat(map).containsEntry("key3", "c");
50+
}
51+
}

pom.xml

+1
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515

1616
<modules>
1717
<module>avaje-config</module>
18+
<module>avaje-config-toml</module>
1819
<module>avaje-aws-appconfig</module>
1920
<module>avaje-dynamic-logback</module>
2021
</modules>

0 commit comments

Comments
 (0)