From 72421ea1dadb7ea506e981072d3b7b227b9df0c7 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sun, 22 Oct 2023 22:49:22 +0100 Subject: Parse config immediately --- .../shedlang/compiler/config/ProjectConfig.java | 36 ++++++++++++---------- 1 file changed, 20 insertions(+), 16 deletions(-) (limited to 'src/main/java') 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 bins, + List 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 bins() { - var binsArray = config.getArray(List.of("shed", "bins")); + private static List 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 examples() { - var examplesArray = config.getArray(List.of("shed", "examples")); + public static List 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"); + } } -- cgit v1.2.3