summaryrefslogtreecommitdiff
path: root/src/main/java/moe/nea/prickly/config/ConfigPath.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/moe/nea/prickly/config/ConfigPath.java')
-rw-r--r--src/main/java/moe/nea/prickly/config/ConfigPath.java57
1 files changed, 57 insertions, 0 deletions
diff --git a/src/main/java/moe/nea/prickly/config/ConfigPath.java b/src/main/java/moe/nea/prickly/config/ConfigPath.java
new file mode 100644
index 0000000..3311910
--- /dev/null
+++ b/src/main/java/moe/nea/prickly/config/ConfigPath.java
@@ -0,0 +1,57 @@
+package moe.nea.prickly.config;
+
+import lombok.extern.slf4j.Slf4j;
+
+import java.util.Optional;
+import java.util.function.Supplier;
+
+@Slf4j
+public record ConfigPath(String path) {
+ public ConfigPath join(String extraPath) {
+ return new ConfigPath(path + "_" + extraPath);
+ }
+
+ public Optional<String> getString() {
+ return Optional.ofNullable(ConfigCompat.getEnv(path));
+ }
+
+ public Optional<Integer> getInt() {
+ var str = getString();
+ if (str.isPresent())
+ try {
+ return Optional.of(Integer.parseInt(str.get()));
+ } catch (NumberFormatException ex) {
+ log.warn("could not parse config value at {}", path, ex);
+ }
+ return Optional.empty();
+ }
+
+ public Optional<Boolean> getBoolean() {
+ var str = getString();
+ if (str.isPresent()) {
+ var sstr = str.get();
+ if (sstr.equalsIgnoreCase("true") || sstr.equals("1"))
+ return OPT_TRUE;
+ else if (sstr.equalsIgnoreCase("false") || sstr.equals("0"))
+ return OPT_FALSE;
+ else
+ log.warn("could not parse boolean value at {}", path);
+ }
+ return Optional.empty();
+ }
+
+ private static final Optional<Boolean> OPT_TRUE = Optional.of(true),
+ OPT_FALSE = Optional.of(false);
+
+ public Supplier<RuntimeException> requireMessage() {
+ return () -> new RuntimeException("missing required value at path " + path());
+ }
+
+ public String requireString() {
+ return getString().orElseThrow(requireMessage());
+ }
+
+ public int requireInt() {
+ return getInt().orElseThrow(requireMessage());
+ }
+}