diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-10-22 22:49:22 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-10-22 22:49:22 +0100 |
| commit | 72421ea1dadb7ea506e981072d3b7b227b9df0c7 (patch) | |
| tree | 0453c05a9ad0113a05867123bc6eb18440ef5e03 /src/main/java | |
| parent | ac6c30e9383cf4da05a98c8397e88f39cfa39834 (diff) | |
Parse config immediately
Diffstat (limited to 'src/main/java')
| -rw-r--r-- | src/main/java/org/shedlang/compiler/config/ProjectConfig.java | 36 |
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"); + } } |
