Skip to content

Commit

Permalink
TypeObject
Browse files Browse the repository at this point in the history
  • Loading branch information
ZZZank committed Jun 3, 2024
1 parent 8e8dc4d commit 8de29b7
Show file tree
Hide file tree
Showing 2 changed files with 50 additions and 4 deletions.
6 changes: 2 additions & 4 deletions src/main/java/com/probejs/document/type/DocTypeResolver.java
Original file line number Diff line number Diff line change
Expand Up @@ -45,10 +45,8 @@ public static DocType resolve(String type) {
return new TypeTuple(type);
}

//TODO: Resolve object type
if (type.startsWith("{")) {
// {[x in string]: string}
return new TypeLiteral(type);
if (TypeObject.test(type)) {
return new TypeObject(type);
}

val splitUnion = StringUtil.splitFirst(type, "|");
Expand Down
48 changes: 48 additions & 0 deletions src/main/java/com/probejs/document/type/TypeObject.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package com.probejs.document.type;

import com.probejs.util.StringUtil;
import lombok.AllArgsConstructor;

import java.util.HashMap;
import java.util.Map;
import java.util.function.BiFunction;
import java.util.stream.Collectors;

/**
* {@code {value: number, mapping: Map<string,string>, [x in string]: string}}
* @author ZZZank
*/
@AllArgsConstructor
public class TypeObject implements DocType {

public static boolean test(String type) {
return type.startsWith("{") && type.endsWith("}");
}

private final Map<String, DocType> raw;

public TypeObject(String typeStr) {
if (!test(typeStr)) {
throw new IllegalArgumentException();
}
this.raw = new HashMap<>();
StringUtil.splitLayer(typeStr, ",")
.stream()
.map(String::trim)
.map(s -> StringUtil.splitFirst(s, ":"))
.forEach(p -> raw.put(p.first().trim(), DocTypeResolver.resolve(p.second())));
}

@Override
public String getTypeName() {
return transform(dummyTransformer);
}

@Override
public String transform(BiFunction<DocType, String, String> transformer) {
return "{" + raw.entrySet()
.stream()
.map(entry -> String.format("%s: %s", entry.getKey(), entry.getValue().transform(transformer)))
.collect(Collectors.joining(", ")) + "}";
}
}

0 comments on commit 8de29b7

Please sign in to comment.