aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2024-12-23 12:00:42 +0000
committerMichael Williamson <mike@zwobble.org>2024-12-23 12:00:42 +0000
commit5e54269bed1266534435f54c950fb7b9645dff24 (patch)
tree1c13a46a758d3151f70d1d4b165f87fa95fbfe4f /src/main/java
parent31fc64bc31b43c5dcddbe263a38645d146fc4e5e (diff)
Add TomlTableWithSource.getLongOrNone()
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/config/toml/TomlTableWithSource.java21
1 files changed, 21 insertions, 0 deletions
diff --git a/src/main/java/org/shedlang/compiler/config/toml/TomlTableWithSource.java b/src/main/java/org/shedlang/compiler/config/toml/TomlTableWithSource.java
index 725d510a..d6ac3ba8 100644
--- a/src/main/java/org/shedlang/compiler/config/toml/TomlTableWithSource.java
+++ b/src/main/java/org/shedlang/compiler/config/toml/TomlTableWithSource.java
@@ -12,6 +12,7 @@ import org.tomlj.TomlTable;
import java.text.MessageFormat;
import java.util.List;
import java.util.Optional;
+import java.util.OptionalLong;
import java.util.stream.IntStream;
public record TomlTableWithSource(
@@ -149,6 +150,26 @@ public record TomlTableWithSource(
);
}
+ public OptionalLong getLongOrNone(String key) {
+ var value = table.get(key);
+ var valuePosition = table.inputPositionOf(key);
+
+ if (value == null) {
+ return OptionalLong.empty();
+ }
+
+ if (value instanceof Long valueLong) {
+ return OptionalLong.of(valueLong);
+ }
+
+ throw new UnexpectedTypeConfigError(
+ path.plusKey(key),
+ "a long",
+ value.getClass(),
+ TomlSource.sourceAtTomlPosition(fullSource, valuePosition)
+ );
+ }
+
public long getLong(String key) {
var value = table.get(key);
var valuePosition = table.inputPositionOf(key);