Skip to content

Commit

Permalink
Merge pull request #2089 from heshanpadmasiri/fix/type-creator
Browse files Browse the repository at this point in the history
Fix record type creation
  • Loading branch information
heshanpadmasiri committed Jul 30, 2024
2 parents d483e9a + facfa0a commit ee33f3f
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,12 @@
*/
package io.ballerina.stdlib.http.api;

import io.ballerina.runtime.api.PredefinedTypes;
import io.ballerina.runtime.api.TypeTags;
import io.ballerina.runtime.api.creators.TypeCreator;
import io.ballerina.runtime.api.creators.ValueCreator;
import io.ballerina.runtime.api.types.ArrayType;
import io.ballerina.runtime.api.types.FiniteType;
import io.ballerina.runtime.api.types.MapType;
import io.ballerina.runtime.api.types.MethodType;
import io.ballerina.runtime.api.types.RecordType;
Expand All @@ -45,11 +47,13 @@
import java.util.HashSet;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;

import static io.ballerina.runtime.api.flags.SymbolFlags.OPTIONAL;
import static io.ballerina.stdlib.http.api.HttpConstants.ANN_NAME_RESOURCE_CONFIG;
import static io.ballerina.stdlib.http.api.HttpConstants.APPLICATION_JSON;
import static io.ballerina.stdlib.http.api.HttpConstants.APPLICATION_OCTET_STREAM;
Expand Down Expand Up @@ -82,8 +86,8 @@ public class HttpResource implements Resource {
private static final BString HTTP_RESOURCE_CONFIG =
StringUtils.fromString(ModuleUtils.getHttpPackageIdentifier() + ":" + ANN_NAME_RESOURCE_CONFIG);
private static final String RETURN_ANNOT_PREFIX = "$returns$";
private static final MapType LINK_MAP_TYPE = TypeCreator.createMapType(TypeCreator.createRecordType(
LINK, ModuleUtils.getHttpPackage(), 0, false, 0));
private static final RecordType LINK_TYPE = createLinkType();
private static final MapType LINK_MAP_TYPE = TypeCreator.createMapType(LINK_TYPE);

private String resourceLinkName;
private List<LinkedResourceInfo> linkedResources = new ArrayList<>();
Expand Down Expand Up @@ -497,6 +501,20 @@ public RemoteMethodType getRemoteFunction() {
return (RemoteMethodType) balResource;
}

private static RecordType createLinkType() {
FiniteType method = TypeCreator.createFiniteType("Method",
Stream.of("GET", "POST", "PUT", "DELETE", "PATCH", "HEAD", "OPTIONS")
.map(StringUtils::fromString).collect(Collectors.toUnmodifiableSet()),
0);
return TypeCreator.createRecordType(LINK, ModuleUtils.getHttpPackage(), 0, Map.of(
"rel", TypeCreator.createField(PredefinedTypes.TYPE_STRING, "rel", OPTIONAL),
"href", TypeCreator.createField(PredefinedTypes.TYPE_STRING, "href", 0),
"types",
TypeCreator.createField(TypeCreator.createArrayType(PredefinedTypes.TYPE_STRING), "types", OPTIONAL),
"methods", TypeCreator.createField(TypeCreator.createArrayType(method), "methods", OPTIONAL)
), PredefinedTypes.TYPE_NEVER, false, 0);
}

/**
* Linked resource information.
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
*/
package io.ballerina.stdlib.http.api.nativeimpl;

import io.ballerina.runtime.api.PredefinedTypes;
import io.ballerina.runtime.api.creators.TypeCreator;
import io.ballerina.runtime.api.creators.ValueCreator;
import io.ballerina.runtime.api.types.ArrayType;
Expand All @@ -30,6 +31,8 @@
import io.ballerina.stdlib.http.api.ValueCreatorUtils;
import io.ballerina.stdlib.mime.util.HeaderUtil;

import java.util.Map;

import static io.ballerina.stdlib.http.api.HttpConstants.HEADER_VALUE_FIELD;
import static io.ballerina.stdlib.http.api.HttpConstants.HEADER_VALUE_PARAM_FIELD;
import static io.ballerina.stdlib.http.api.HttpConstants.HEADER_VALUE_RECORD;
Expand All @@ -44,9 +47,8 @@
*/
public class ParseHeader {

private static final RecordType RECORD_TYPE = TypeCreator.createRecordType(
HEADER_VALUE_RECORD, ModuleUtils.getHttpPackage(), 0, false, 0);
private static final ArrayType ARRAY_TYPE = TypeCreator.createArrayType(RECORD_TYPE);
private static final RecordType HEADER_VALUE_TYPE = createHeaderValueType();
private static final ArrayType ARRAY_TYPE = TypeCreator.createArrayType(HEADER_VALUE_TYPE);
private static final String COMMA_OUT_OF_QUOTATIONS = "(,)(?=(?:[^\"]|\"[^\"]*\")*$)";

public static Object parseHeader(BString headerValue) {
Expand All @@ -72,4 +74,14 @@ public static Object parseHeader(BString headerValue) {

private ParseHeader() {
}

private static RecordType createHeaderValueType() {
return TypeCreator.createRecordType(HEADER_VALUE_RECORD, ModuleUtils.getHttpPackage(), 0,
Map.of(
"value", TypeCreator.createField(PredefinedTypes.TYPE_STRING, "value", 0),
"params",
TypeCreator.createField(TypeCreator.createMapType(PredefinedTypes.TYPE_STRING), "params", 0)
),
PredefinedTypes.TYPE_NEVER, false, 0);
}
}

0 comments on commit ee33f3f

Please sign in to comment.