use of com.palantir.conjure.spec.AliasDefinition in project conjure-postman by palantir.
the class TemplateTypeVisitor method visitReference.
@SuppressWarnings("PreferSafeLoggingPreconditions")
@Override
public JsonNode visitReference(TypeName value) {
TypeDefinition definition = types.get(value);
TemplateTypeVisitor visitor = this;
return definition.accept(new TypeDefinition.Visitor<JsonNode>() {
@Override
public JsonNode visitAlias(AliasDefinition value) {
JsonNode wrapped = value.getAlias().accept(visitor);
if (wrapped instanceof TextNode) {
return new TextNode(String.format("{{ %s(%s) }}", value.getTypeName().getName(), wrapped.toString().replaceAll("[\"{}]", "")));
}
return wrapped;
}
@Override
public JsonNode visitEnum(EnumDefinition value) {
return new TextNode(value.getValues().stream().map(EnumValueDefinition::getValue).collect(Collectors.joining("|")));
}
@Override
public JsonNode visitObject(ObjectDefinition value) {
if (seenTypeStack.contains(value.getTypeName())) {
return new TextNode(String.format("{{%s}}", value.getTypeName().getName()));
}
seenTypeStack.push(value.getTypeName());
ObjectNode node = objectMapper.createObjectNode();
value.getFields().forEach(fieldDefinition -> node.set(fieldDefinition.getFieldName().get(), fieldDefinition.getType().accept(visitor)));
Preconditions.checkState(seenTypeStack.pop().equals(value.getTypeName()));
return node;
}
@Override
public JsonNode visitUnion(UnionDefinition value) {
if (value.getUnion().isEmpty()) {
return null;
} else {
if (seenTypeStack.contains(value.getTypeName())) {
return new TextNode(String.format("{{%s}}", value.getTypeName().getName()));
}
seenTypeStack.push(value.getTypeName());
String unionTypes = value.getUnion().stream().map(FieldDefinition::getFieldName).map(FieldName::get).collect(Collectors.joining("|"));
ObjectNode templates = objectMapper.createObjectNode();
value.getUnion().forEach(field -> templates.set(field.getFieldName().get(), field.getType().accept(visitor)));
JsonNode union = objectMapper.createObjectNode().put("type", unionTypes).set("oneOf", templates);
Preconditions.checkState(seenTypeStack.pop().equals(value.getTypeName()));
return union;
}
}
@Override
public JsonNode visitUnknown(String _unknownType) {
return new TextNode("{{UNKNOWN}}");
}
});
}
use of com.palantir.conjure.spec.AliasDefinition in project conjure-postman by palantir.
the class TypeNameFormatterVisitor method visitReference.
@Override
public String visitReference(TypeName value) {
TypeDefinition definition = types.get(value);
TypeNameFormatterVisitor visitor = this;
return definition.accept(new TypeDefinition.Visitor<String>() {
@Override
public String visitAlias(AliasDefinition value) {
return String.format("%s(%s)", value.getTypeName().getName(), value.getAlias().accept(visitor));
}
@Override
public String visitEnum(EnumDefinition value) {
return value.getTypeName().getName();
}
@Override
public String visitObject(ObjectDefinition value) {
return value.getTypeName().getName();
}
@Override
public String visitUnion(UnionDefinition value) {
return value.getTypeName().getName();
}
@Override
public String visitUnknown(String _unknownType) {
return "UNKNOWN";
}
});
}
use of com.palantir.conjure.spec.AliasDefinition in project conjure by palantir.
the class DealiasingTypeVisitor method visitReference.
@Override
public Either<TypeDefinition, Type> visitReference(TypeName value) {
TypeDefinition typeDefinition = objects.get(value);
Preconditions.checkState(typeDefinition != null, "Referenced TypeDefinition not found in map of types for TypeName: %s", value);
return typeDefinition.accept(new TypeDefinition.Visitor<Either<TypeDefinition, Type>>() {
@Override
public Either<TypeDefinition, Type> visitAlias(AliasDefinition value) {
// Recursively visit target of alias
return value.getAlias().accept(DealiasingTypeVisitor.this);
}
@Override
public Either<TypeDefinition, Type> visitEnum(EnumDefinition value) {
return Either.left(TypeDefinition.enum_(value));
}
@Override
public Either<TypeDefinition, Type> visitObject(ObjectDefinition value) {
return Either.left(TypeDefinition.object(value));
}
@Override
public Either<TypeDefinition, Type> visitUnion(UnionDefinition value) {
return Either.left(TypeDefinition.union(value));
}
@Override
public Either<TypeDefinition, Type> visitUnknown(String unknownType) {
throw new IllegalStateException("Unsupported type: " + unknownType);
}
});
}
Aggregations