diff --git a/endpoints-templates/Codecs.ftl b/endpoints-templates/Codecs.ftl index 91a06d3..428ac59 100644 --- a/endpoints-templates/Codecs.ftl +++ b/endpoints-templates/Codecs.ftl @@ -1,4 +1,4 @@ -package se.senashdev.projekt.api +package ${config.package} object Codecs: <#list typeDefinitions as type> diff --git a/endpoints-templates/Endpoints.ftl b/endpoints-templates/Endpoints.ftl index fc1749a..de00221 100644 --- a/endpoints-templates/Endpoints.ftl +++ b/endpoints-templates/Endpoints.ftl @@ -1,4 +1,4 @@ -package se.senashdev.projekt.api +package ${config.package} import se.rutdev.projekt.api.HttpProtocol.VersionedResponse import se.rutdev.framework.json.circe.RutUtilsCodec @@ -13,7 +13,7 @@ class Endpoints(override val config: OAuthUtils.OAuthConfig) extends framework.s type ApiEndpoint[I, O] = OAuthEndpoint[RequestMeta.OAuthRequestMeta, I, ProblemDetail, O] <#list endpoints as endpoint> - val ${endpoint.inputType}Endpoint = ApiEndpoint[${endpoint.inputType?cap_first}, VersionedResponse] = + val ${endpoint.inputType?uncap_first}Endpoint = ApiEndpoint[${endpoint.inputType?cap_first}, VersionedResponse] = <#list endpoint.paths.paths> apiV1Endpoint .post diff --git a/endpoints-templates/Protocol.ftl b/endpoints-templates/Protocol.ftl index 96423b7..f1e323a 100644 --- a/endpoints-templates/Protocol.ftl +++ b/endpoints-templates/Protocol.ftl @@ -1,7 +1,7 @@ -package se.senashdev.projekt.api +package ${config.package} object Protocol: -<#list typeDefinitions as type> +<#list typeDefinitions?sort as type> case class ${type.name?cap_first}( <#list type.fields as field> ${field.name} : ${field.type}, diff --git a/parser/src/main/antlr4/nu/zoom/dsl/parser/Endpoints.g4 b/parser/src/main/antlr4/nu/zoom/dsl/parser/Endpoints.g4 index c1bd90b..fb8878e 100644 --- a/parser/src/main/antlr4/nu/zoom/dsl/parser/Endpoints.g4 +++ b/parser/src/main/antlr4/nu/zoom/dsl/parser/Endpoints.g4 @@ -21,6 +21,7 @@ fragment DIGIT : [0-9] ; fragment LOWERCASE : [a-z] ; fragment UPPERCASE : [A-Z] ; fragment GENERICS : '['|']'|'<'|'>' ; +fragment DOT : '.' ; fragment COMMENT_BEGIN : '/*' ; fragment COMMENT_END : '*/' ; WS : [ \t\n\r]+ -> skip; @@ -28,5 +29,5 @@ COMMENT : COMMENT_BEGIN ~[/]* COMMENT_END -> skip; REQUEST_PREFIX : '<-' ; RESPONSE_PREFIX : '->' ; SLASH : '/' ; -IDENTIFIER : (LOWERCASE | UPPERCASE) (LOWERCASE | UPPERCASE | DIGIT | GENERICS)* ; +IDENTIFIER : (LOWERCASE | UPPERCASE) (LOWERCASE | UPPERCASE | DIGIT | GENERICS | DOT)* ; VALUE : ~[ ,{}:()/="#';*\n\r\t]+ ; diff --git a/parser/src/main/java/nu/zoom/dsl/ast/ConfigItemNode.java b/parser/src/main/java/nu/zoom/dsl/ast/ConfigItemNode.java deleted file mode 100644 index b18eea6..0000000 --- a/parser/src/main/java/nu/zoom/dsl/ast/ConfigItemNode.java +++ /dev/null @@ -1,4 +0,0 @@ -package nu.zoom.dsl.ast; - -public record ConfigItemNode(String key, String value) { -} diff --git a/parser/src/main/java/nu/zoom/dsl/ast/DocumentNode.java b/parser/src/main/java/nu/zoom/dsl/ast/DocumentNode.java index 49b5aaf..dfa3608 100644 --- a/parser/src/main/java/nu/zoom/dsl/ast/DocumentNode.java +++ b/parser/src/main/java/nu/zoom/dsl/ast/DocumentNode.java @@ -1,9 +1,10 @@ package nu.zoom.dsl.ast; import java.util.List; +import java.util.Map; public record DocumentNode( - List configItems, + Map config, List typeDefinitions, List endpoints) { } diff --git a/parser/src/main/java/nu/zoom/dsl/ast/EndpointsVisitorTransformer.java b/parser/src/main/java/nu/zoom/dsl/ast/EndpointsVisitorTransformer.java index e75282e..658d808 100644 --- a/parser/src/main/java/nu/zoom/dsl/ast/EndpointsVisitorTransformer.java +++ b/parser/src/main/java/nu/zoom/dsl/ast/EndpointsVisitorTransformer.java @@ -4,15 +4,12 @@ import nu.zoom.dsl.parser.EndpointsBaseVisitor; import nu.zoom.dsl.parser.EndpointsParser; import org.antlr.v4.runtime.tree.TerminalNode; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Optional; +import java.util.*; import java.util.stream.Collectors; public class EndpointsVisitorTransformer extends EndpointsBaseVisitor { private final ArrayList endpoints = new ArrayList<>(); - private final ArrayList config = new ArrayList<>(); + private final HashMap config = new HashMap<>(); private final HashSet dataTypes = new HashSet<>(); public EndpointsVisitorTransformer() { @@ -22,8 +19,8 @@ public class EndpointsVisitorTransformer extends EndpointsBaseVisitor getConfig() { - return List.copyOf(config); + public Map getConfig() { + return Map.copyOf(config); } public List getDataTypes() { @@ -34,14 +31,14 @@ public class EndpointsVisitorTransformer extends EndpointsBaseVisitor t.name().equals(type.name())).findAny().isPresent()) { - throw new ParseException("Duplicate datatype '" + type.name()+ "'") ; + throw new ParseException("Duplicate datatype '" + type.name()+ "' at line " + lineNumber) ; } else { this.dataTypes.add(type); } diff --git a/test01.endpoints b/test01.endpoints index a148a57..73844f0 100644 --- a/test01.endpoints +++ b/test01.endpoints @@ -1,7 +1,9 @@ -{ some: configvalue, someother:value } - -AType(data: List[String]) +{ some: configvalue, someother:value, + package: se.rutdev.senash +} /some/endpoint <- SomeType(foo:String) +Embedded(foo:Bar) /some/other/endpoint <- (bar:Seq[Embedded]) -/yet/other/endpoint2 <- (bar2:Seq[AType]) \ No newline at end of file +/yet/other/endpoint2 <- (bar2:Seq[AType]) +AType(data: java.util.List)