aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-10-22 22:49:22 +0100
committerMichael Williamson <mike@zwobble.org>2023-10-22 22:49:22 +0100
commit72421ea1dadb7ea506e981072d3b7b227b9df0c7 (patch)
tree0453c05a9ad0113a05867123bc6eb18440ef5e03 /src/main/java
parentac6c30e9383cf4da05a98c8397e88f39cfa39834 (diff)
Parse config immediately
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/config/ProjectConfig.java36
1 files changed, 20 insertions, 16 deletions
diff --git a/src/main/java/org/shedlang/compiler/config/ProjectConfig.java b/src/main/java/org/shedlang/compiler/config/ProjectConfig.java
index 0e4d22e2..7a81a726 100644
--- a/src/main/java/org/shedlang/compiler/config/ProjectConfig.java
+++ b/src/main/java/org/shedlang/compiler/config/ProjectConfig.java
@@ -8,41 +8,45 @@ import java.nio.file.Path;
import java.util.List;
import java.util.stream.IntStream;
-public class ProjectConfig {
+public record ProjectConfig(
+ Path root,
+ List<BinConfig> bins,
+ List<ExampleConfig> examples
+) {
public static ProjectConfig read(Path projectPath) throws IOException {
var result = Toml.parse(projectPath.resolve("shed.toml"));
if (result.hasErrors()) {
throw result.errors().get(0);
}
- return new ProjectConfig(projectPath, result);
+ return fromToml(projectPath, result);
}
- private final Path root;
- private final TomlTable config;
-
- public ProjectConfig(Path root, TomlTable config) {
- this.root = root;
- this.config = config;
- }
-
- public Path targetDir() {
- return root.resolve("target");
+ public static ProjectConfig fromToml(Path root, TomlTable table) {
+ return new ProjectConfig(
+ root,
+ binsFromToml(table),
+ examplesFromToml(table)
+ );
}
- public List<BinConfig> bins() {
- var binsArray = config.getArray(List.of("shed", "bins"));
+ private static List<BinConfig> binsFromToml(TomlTable table) {
+ var binsArray = table.getArray(List.of("shed", "bins"));
return IntStream.range(0, binsArray.size())
.mapToObj(binIndex -> BinConfig.fromToml(binsArray.getTable(binIndex)))
.toList();
}
- public List<ExampleConfig> examples() {
- var examplesArray = config.getArray(List.of("shed", "examples"));
+ public static List<ExampleConfig> examplesFromToml(TomlTable table) {
+ var examplesArray = table.getArray(List.of("shed", "examples"));
return IntStream.range(0, examplesArray.size())
.mapToObj(exampleIndex -> ExampleConfig.fromToml(examplesArray.getTable(exampleIndex)))
.toList();
}
+
+ public Path targetDir() {
+ return root.resolve("target");
+ }
}