summaryrefslogtreecommitdiff
path: root/src/main/java/moe/nea/prickly/config/ConfigCompat.java
diff options
context:
space:
mode:
authorLinnea Gräf <nea@nea.moe>2025-10-12 17:30:51 +0200
committerLinnea Gräf <nea@nea.moe>2025-10-12 17:30:51 +0200
commitabc83ee7180e2ea4c5d65689dca48bfe88023862 (patch)
treeefebd2b984cddc1374312bec497aa7ff8cb45b44 /src/main/java/moe/nea/prickly/config/ConfigCompat.java
parentad1fc4e34b80c40245d8e15b4b480e0bcc7e3104 (diff)
downloadprickly-abc83ee7180e2ea4c5d65689dca48bfe88023862.tar.gz
prickly-abc83ee7180e2ea4c5d65689dca48bfe88023862.tar.bz2
prickly-abc83ee7180e2ea4c5d65689dca48bfe88023862.zip
feat: application registration
Diffstat (limited to 'src/main/java/moe/nea/prickly/config/ConfigCompat.java')
-rw-r--r--src/main/java/moe/nea/prickly/config/ConfigCompat.java33
1 files changed, 27 insertions, 6 deletions
diff --git a/src/main/java/moe/nea/prickly/config/ConfigCompat.java b/src/main/java/moe/nea/prickly/config/ConfigCompat.java
index d574759..6c94947 100644
--- a/src/main/java/moe/nea/prickly/config/ConfigCompat.java
+++ b/src/main/java/moe/nea/prickly/config/ConfigCompat.java
@@ -5,8 +5,8 @@ import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
-import java.util.Map;
-import java.util.Properties;
+import java.util.*;
+import java.util.stream.Collectors;
import lombok.extern.slf4j.Slf4j;
import org.jspecify.annotations.Nullable;
@@ -30,11 +30,32 @@ public class ConfigCompat {
return (Map) properties;
}
- public static Map<String, String> DOTENV_FALLBACK = loadDotenv();
+ public static Map<String, String> DOTENV_FALLBACK = Collections.unmodifiableMap(loadDotenv());
+ public static NavigableMap<String, String> ENV;
+
+ static {
+ var env = new TreeMap<String, String>();
+ env.putAll(DOTENV_FALLBACK);
+ env.putAll(System.getenv());
+ ENV = Collections.unmodifiableNavigableMap(env);
+ }
public static @Nullable String getEnv(String key) {
- var value = System.getenv(key);
- if (value != null) return value;
- return DOTENV_FALLBACK.get(key);
+ return ENV.get(key);
+ }
+
+ public static Map<String, String> getAllEnvStartingWith(String prefix) {
+ return ENV.subMap(prefix + "_", prefix + (char) ((int) '_' + 1));
+ }
+
+ public static Set<String> getAllDirectChildren(String prefix) {
+ int start = prefix.length() + 1;
+ return getAllEnvStartingWith(prefix).keySet().stream()
+ .map(it -> {
+ int nextUnderscore = it.indexOf('_', start);
+ if (nextUnderscore < 0) return it.substring(start);
+ else return it.substring(start, nextUnderscore);
+ })
+ .collect(Collectors.toSet());
}
}