summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--examples/01-struct/hobgoblin.json536
-rw-r--r--examples/02-sum/hobgoblin.json526
-rw-r--r--examples/03-list/hobgoblin.json526
-rw-r--r--examples/04-native-type/hobgoblin.json526
-rw-r--r--examples/05-native-type-custom-config/hobgoblin.json530
-rw-r--r--examples/06-custom-code/hobgoblin.json526
-rw-r--r--examples/07-imports/hobgoblin.json526
-rw-r--r--examples/08-enum/hobgoblin.json526
-rw-r--r--hobgoblin/hobgoblin.json527
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/config/ProjectConfig.java14
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/generators/java/JavaGeneratorConfig.java5
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javapreciselymatchers/JavaPreciselyMatchersGenerator.java13
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatypes/JavaTypesGenerator.java12
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttypes/RustTypesGenerator.java2
14 files changed, 182 insertions, 113 deletions
diff --git a/examples/01-struct/hobgoblin.json5 b/examples/01-struct/hobgoblin.json5
index 4e7dfaa..19e0f93 100644
--- a/examples/01-struct/hobgoblin.json5
+++ b/examples/01-struct/hobgoblin.json5
@@ -1,19 +1,23 @@
{
- outputs: [
- {
- generator: "java-types",
- path: "output/java/src/gen/java",
- packageName: "org.zwobble.example.types"
+ outputs: {
+ langs: {
+ java: {
+ packageName: "org.zwobble.example.types",
+ },
},
- // TODO: remove duplication between configs
- {
- generator: "java-precisely-matchers",
- path: "output/java/src/gen/java",
- packageName: "org.zwobble.example.types",
- },
- {
- generator: "rust-types",
- path: "output/rust/src",
- },
- ],
+ generators: [
+ {
+ generator: "java-types",
+ path: "output/java/src/gen/java",
+ },
+ {
+ generator: "java-precisely-matchers",
+ path: "output/java/src/gen/java",
+ },
+ {
+ generator: "rust-types",
+ path: "output/rust/src",
+ },
+ ],
+ }
}
diff --git a/examples/02-sum/hobgoblin.json5 b/examples/02-sum/hobgoblin.json5
index 2bf59c3..12713d4 100644
--- a/examples/02-sum/hobgoblin.json5
+++ b/examples/02-sum/hobgoblin.json5
@@ -1,13 +1,19 @@
{
- outputs: [
- {
- generator: "java-types",
- path: "output/java/src/gen/java",
- packageName: "org.zwobble.example.types"
+ outputs: {
+ langs: {
+ java: {
+ packageName: "org.zwobble.example.types",
+ },
},
- {
- generator: "rust-types",
- path: "output/rust/src",
- },
- ],
+ generators: [
+ {
+ generator: "java-types",
+ path: "output/java/src/gen/java",
+ },
+ {
+ generator: "rust-types",
+ path: "output/rust/src",
+ },
+ ],
+ },
}
diff --git a/examples/03-list/hobgoblin.json5 b/examples/03-list/hobgoblin.json5
index 2bf59c3..12713d4 100644
--- a/examples/03-list/hobgoblin.json5
+++ b/examples/03-list/hobgoblin.json5
@@ -1,13 +1,19 @@
{
- outputs: [
- {
- generator: "java-types",
- path: "output/java/src/gen/java",
- packageName: "org.zwobble.example.types"
+ outputs: {
+ langs: {
+ java: {
+ packageName: "org.zwobble.example.types",
+ },
},
- {
- generator: "rust-types",
- path: "output/rust/src",
- },
- ],
+ generators: [
+ {
+ generator: "java-types",
+ path: "output/java/src/gen/java",
+ },
+ {
+ generator: "rust-types",
+ path: "output/rust/src",
+ },
+ ],
+ },
}
diff --git a/examples/04-native-type/hobgoblin.json5 b/examples/04-native-type/hobgoblin.json5
index 8f92e51..a0f60c3 100644
--- a/examples/04-native-type/hobgoblin.json5
+++ b/examples/04-native-type/hobgoblin.json5
@@ -1,13 +1,19 @@
{
- outputs: [
- {
- generator: "java-types",
- path: "output/java/src/gen/java",
- packageName: "org.zwobble.example.types",
+ outputs: {
+ langs: {
+ java: {
+ packageName: "org.zwobble.example.types",
+ },
},
- {
- generator: "rust-types",
- path: "output/rust/src/gen",
- },
- ],
+ generators: [
+ {
+ generator: "java-types",
+ path: "output/java/src/gen/java",
+ },
+ {
+ generator: "rust-types",
+ path: "output/rust/src/gen",
+ },
+ ],
+ },
}
diff --git a/examples/05-native-type-custom-config/hobgoblin.json5 b/examples/05-native-type-custom-config/hobgoblin.json5
index 89048ac..1c92a49 100644
--- a/examples/05-native-type-custom-config/hobgoblin.json5
+++ b/examples/05-native-type-custom-config/hobgoblin.json5
@@ -1,15 +1,21 @@
{
- outputs: [
- {
- generator: "java-types",
- path: "output/java/src/gen/java",
- packageName: "org.zwobble.example.types",
- nativeTypes: [
- {
- hobgoblin: "point.Point",
- java: "org.zwobble.example.Point",
- }
- ]
+ outputs: {
+ langs: {
+ java: {
+ packageName: "org.zwobble.example.types",
+ nativeTypes: [
+ {
+ hobgoblin: "point.Point",
+ java: "org.zwobble.example.Point",
+ },
+ ],
+ },
},
- ],
+ generators: [
+ {
+ generator: "java-types",
+ path: "output/java/src/gen/java",
+ },
+ ],
+ },
}
diff --git a/examples/06-custom-code/hobgoblin.json5 b/examples/06-custom-code/hobgoblin.json5
index d599806..1d08a40 100644
--- a/examples/06-custom-code/hobgoblin.json5
+++ b/examples/06-custom-code/hobgoblin.json5
@@ -1,13 +1,19 @@
{
- outputs: [
- {
- generator: "java-types",
- path: "output/java/src/main/java",
- packageName: "org.zwobble.example.types"
+ outputs: {
+ langs: {
+ java: {
+ packageName: "org.zwobble.example.types",
+ },
},
- {
- generator: "rust-types",
- path: "output/rust/src/gen",
- },
- ],
+ generators: [
+ {
+ generator: "java-types",
+ path: "output/java/src/main/java",
+ },
+ {
+ generator: "rust-types",
+ path: "output/rust/src/gen",
+ },
+ ],
+ },
}
diff --git a/examples/07-imports/hobgoblin.json5 b/examples/07-imports/hobgoblin.json5
index 2bf59c3..12713d4 100644
--- a/examples/07-imports/hobgoblin.json5
+++ b/examples/07-imports/hobgoblin.json5
@@ -1,13 +1,19 @@
{
- outputs: [
- {
- generator: "java-types",
- path: "output/java/src/gen/java",
- packageName: "org.zwobble.example.types"
+ outputs: {
+ langs: {
+ java: {
+ packageName: "org.zwobble.example.types",
+ },
},
- {
- generator: "rust-types",
- path: "output/rust/src",
- },
- ],
+ generators: [
+ {
+ generator: "java-types",
+ path: "output/java/src/gen/java",
+ },
+ {
+ generator: "rust-types",
+ path: "output/rust/src",
+ },
+ ],
+ },
}
diff --git a/examples/08-enum/hobgoblin.json5 b/examples/08-enum/hobgoblin.json5
index 2bf59c3..12713d4 100644
--- a/examples/08-enum/hobgoblin.json5
+++ b/examples/08-enum/hobgoblin.json5
@@ -1,13 +1,19 @@
{
- outputs: [
- {
- generator: "java-types",
- path: "output/java/src/gen/java",
- packageName: "org.zwobble.example.types"
+ outputs: {
+ langs: {
+ java: {
+ packageName: "org.zwobble.example.types",
+ },
},
- {
- generator: "rust-types",
- path: "output/rust/src",
- },
- ],
+ generators: [
+ {
+ generator: "java-types",
+ path: "output/java/src/gen/java",
+ },
+ {
+ generator: "rust-types",
+ path: "output/rust/src",
+ },
+ ],
+ },
}
diff --git a/hobgoblin/hobgoblin.json5 b/hobgoblin/hobgoblin.json5
index 36c7014..3de67b4 100644
--- a/hobgoblin/hobgoblin.json5
+++ b/hobgoblin/hobgoblin.json5
@@ -1,14 +1,19 @@
{
- outputs: [
- {
- generator: "java-types",
- path: "../src/main/java",
- packageName: "org.zwobble.hobgoblin.compiler",
+ outputs: {
+ langs: {
+ java: {
+ packageName: "org.zwobble.hobgoblin.compiler",
+ },
},
- {
- generator: "java-precisely-matchers",
- path: "../src/test/java",
- packageName: "org.zwobble.hobgoblin.compiler",
- }
- ],
+ generators: [
+ {
+ generator: "java-types",
+ path: "../src/main/java",
+ },
+ {
+ generator: "java-precisely-matchers",
+ path: "../src/test/java",
+ }
+ ],
+ },
}
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/config/ProjectConfig.java b/src/main/java/org/zwobble/hobgoblin/compiler/config/ProjectConfig.java
index 132a89d..835b496 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/config/ProjectConfig.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/config/ProjectConfig.java
@@ -30,21 +30,23 @@ public record ProjectConfig(
}
private static ProjectConfig fromJson5(Path projectRoot, Json5ObjectReader document) {
- var outputsJson = document.getArrayOfObjects("outputs").orElseThrow();
+ var outputsJson = document.getObject("outputs").orElseThrow();
+ var generatorsJson = outputsJson.getArrayOfObjects("generators").orElseThrow();
+ var langsJson = outputsJson.getObject("langs");
var outputs = new ArrayList<OutputConfig>();
- for (var outputJson : outputsJson) {
- var generatorName = outputJson.getString("generator");
+ for (var generatorJson : generatorsJson) {
+ var generatorName = generatorJson.getString("generator");
var output = switch (generatorName.value()) {
case JavaTypesGenerator.NAME ->
- JavaTypesGenerator.parseOutputConfig(projectRoot, outputJson);
+ JavaTypesGenerator.parseGeneratorConfig(projectRoot, generatorJson, langsJson);
case JavaPreciselyMatchersGenerator.NAME ->
- JavaPreciselyMatchersGenerator.parseOutputConfig(projectRoot, outputJson);
+ JavaPreciselyMatchersGenerator.parseGeneratorConfig(projectRoot, generatorJson, langsJson);
case RustTypesGenerator.NAME ->
- RustTypesGenerator.parseOutputConfig(projectRoot, outputJson);
+ RustTypesGenerator.parseGeneratorConfig(projectRoot, generatorJson);
default ->
throw new UnknownGeneratorError(
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/java/JavaGeneratorConfig.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/java/JavaGeneratorConfig.java
index 4b216a3..f22e8ff 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/java/JavaGeneratorConfig.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/java/JavaGeneratorConfig.java
@@ -14,7 +14,10 @@ public record JavaGeneratorConfig(
Map<NamespaceName, JavaNamespaceConfig> namespaceConfigs,
Map<SimpleNativeType, JavaNativeTypeConfig> nativeTypeConfigs
) {
- public static JavaGeneratorConfig parseOutputConfig(Json5ObjectReader output) {
+ public static JavaGeneratorConfig parseLangsConfig(Optional<Json5ObjectReader> langsJson) {
+ // TODO: better error if missing
+ var output = langsJson.orElseThrow().getObject("java").orElseThrow();
+
var packageName = output.getString("packageName").value();
var namespaceConfigs = parseNamespaceConfigs(output);
var nativeTypeConfigs = parseNativeTypeConfigs(output);
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javapreciselymatchers/JavaPreciselyMatchersGenerator.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javapreciselymatchers/JavaPreciselyMatchersGenerator.java
index fe2caa6..b693ef3 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javapreciselymatchers/JavaPreciselyMatchersGenerator.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javapreciselymatchers/JavaPreciselyMatchersGenerator.java
@@ -15,17 +15,24 @@ import java.io.IOException;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.List;
+import java.util.Optional;
import static org.zwobble.hobgoblin.compiler.util.Casing.lowerCamelCaseToUpperCamelCase;
public class JavaPreciselyMatchersGenerator implements Generator {
public static final String NAME = "java-precisely-matchers";
- public static OutputConfig parseOutputConfig(Path projectRoot, Json5ObjectReader output) {
+ public static OutputConfig parseGeneratorConfig(
+ Path projectRoot,
+ Json5ObjectReader generatorJson,
+ Optional<Json5ObjectReader> langsJson
+ ) {
return () -> {
- var relativeOutputPath = output.getString("path").value();
+ var relativeOutputPath = generatorJson.getString("path").value();
var outputPath = projectRoot.resolve(relativeOutputPath);
- var javaConfig = JavaGeneratorConfig.parseOutputConfig(output);
+
+ var javaConfig = JavaGeneratorConfig.parseLangsConfig(langsJson);
+
var javaGenerator = new JavaGenerator(javaConfig);
return new JavaPreciselyMatchersGenerator(outputPath, javaGenerator);
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatypes/JavaTypesGenerator.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatypes/JavaTypesGenerator.java
index d74322f..b601224 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatypes/JavaTypesGenerator.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatypes/JavaTypesGenerator.java
@@ -24,11 +24,17 @@ public class JavaTypesGenerator implements Generator {
private static final JavaIdentifier BUILDER_TYPE_NAME = JavaIdentifier.of("Builder");
private static final JavaIdentifier BUILD_METHOD_NAME = JavaIdentifier.of("build");
- public static OutputConfig parseOutputConfig(Path projectRoot, Json5ObjectReader output) {
+ public static OutputConfig parseGeneratorConfig(
+ Path projectRoot,
+ Json5ObjectReader generatorJson,
+ Optional<Json5ObjectReader> langsJson
+ ) {
return () -> {
- var relativeOutputPath = output.getString("path").value();
+ var relativeOutputPath = generatorJson.getString("path").value();
var outputPath = projectRoot.resolve(relativeOutputPath);
- var javaConfig = JavaGeneratorConfig.parseOutputConfig(output);
+
+ var javaConfig = JavaGeneratorConfig.parseLangsConfig(langsJson);
+
var javaGenerator = new JavaGenerator(javaConfig);
return new JavaTypesGenerator(outputPath, javaConfig, javaGenerator);
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttypes/RustTypesGenerator.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttypes/RustTypesGenerator.java
index 3847433..4593d38 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttypes/RustTypesGenerator.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttypes/RustTypesGenerator.java
@@ -21,7 +21,7 @@ import java.util.stream.Collectors;
public class RustTypesGenerator implements Generator {
public static final String NAME = "rust-types";
- public static OutputConfig parseOutputConfig(Path projectRoot, Json5ObjectReader output) {
+ public static OutputConfig parseGeneratorConfig(Path projectRoot, Json5ObjectReader output) {
return () -> {
var relativeOutputPath = output.getString("path").value();
var outputPath = projectRoot.resolve(relativeOutputPath);