Search in sources :

Example 1 with AliasDefinition

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}}");
        }
    });
}
Also used : ListType(com.palantir.conjure.spec.ListType) ExternalReference(com.palantir.conjure.spec.ExternalReference) Type(com.palantir.conjure.spec.Type) TypeDefinitionVisitor(com.palantir.conjure.visitor.TypeDefinitionVisitor) Function(java.util.function.Function) ObjectNode(com.fasterxml.jackson.databind.node.ObjectNode) UnionDefinition(com.palantir.conjure.spec.UnionDefinition) MapType(com.palantir.conjure.spec.MapType) Map(java.util.Map) OptionalType(com.palantir.conjure.spec.OptionalType) JsonNode(com.fasterxml.jackson.databind.JsonNode) SetType(com.palantir.conjure.spec.SetType) TypeDefinition(com.palantir.conjure.spec.TypeDefinition) ObjectDefinition(com.palantir.conjure.spec.ObjectDefinition) ObjectMapper(com.fasterxml.jackson.databind.ObjectMapper) EnumDefinition(com.palantir.conjure.spec.EnumDefinition) EnumValueDefinition(com.palantir.conjure.spec.EnumValueDefinition) FieldDefinition(com.palantir.conjure.spec.FieldDefinition) Collectors(java.util.stream.Collectors) TextNode(com.fasterxml.jackson.databind.node.TextNode) Jdk8Module(com.fasterxml.jackson.datatype.jdk8.Jdk8Module) List(java.util.List) AliasDefinition(com.palantir.conjure.spec.AliasDefinition) TypeName(com.palantir.conjure.spec.TypeName) SerializationFeature(com.fasterxml.jackson.databind.SerializationFeature) Preconditions(com.google.common.base.Preconditions) FieldName(com.palantir.conjure.spec.FieldName) PrimitiveType(com.palantir.conjure.spec.PrimitiveType) ArrayDeque(java.util.ArrayDeque) ObjectNode(com.fasterxml.jackson.databind.node.ObjectNode) AliasDefinition(com.palantir.conjure.spec.AliasDefinition) UnionDefinition(com.palantir.conjure.spec.UnionDefinition) JsonNode(com.fasterxml.jackson.databind.JsonNode) TextNode(com.fasterxml.jackson.databind.node.TextNode) ObjectDefinition(com.palantir.conjure.spec.ObjectDefinition) EnumDefinition(com.palantir.conjure.spec.EnumDefinition) TypeDefinition(com.palantir.conjure.spec.TypeDefinition) FieldName(com.palantir.conjure.spec.FieldName)

Example 2 with AliasDefinition

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";
        }
    });
}
Also used : AliasDefinition(com.palantir.conjure.spec.AliasDefinition) UnionDefinition(com.palantir.conjure.spec.UnionDefinition) ObjectDefinition(com.palantir.conjure.spec.ObjectDefinition) EnumDefinition(com.palantir.conjure.spec.EnumDefinition) TypeDefinition(com.palantir.conjure.spec.TypeDefinition)

Example 3 with AliasDefinition

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);
        }
    });
}
Also used : AliasDefinition(com.palantir.conjure.spec.AliasDefinition) Either(com.palantir.conjure.either.Either) UnionDefinition(com.palantir.conjure.spec.UnionDefinition) ObjectDefinition(com.palantir.conjure.spec.ObjectDefinition) EnumDefinition(com.palantir.conjure.spec.EnumDefinition) TypeDefinition(com.palantir.conjure.spec.TypeDefinition)

Aggregations

AliasDefinition (com.palantir.conjure.spec.AliasDefinition)3 EnumDefinition (com.palantir.conjure.spec.EnumDefinition)3 ObjectDefinition (com.palantir.conjure.spec.ObjectDefinition)3 TypeDefinition (com.palantir.conjure.spec.TypeDefinition)3 UnionDefinition (com.palantir.conjure.spec.UnionDefinition)3 JsonNode (com.fasterxml.jackson.databind.JsonNode)1 ObjectMapper (com.fasterxml.jackson.databind.ObjectMapper)1 SerializationFeature (com.fasterxml.jackson.databind.SerializationFeature)1 ObjectNode (com.fasterxml.jackson.databind.node.ObjectNode)1 TextNode (com.fasterxml.jackson.databind.node.TextNode)1 Jdk8Module (com.fasterxml.jackson.datatype.jdk8.Jdk8Module)1 Preconditions (com.google.common.base.Preconditions)1 Either (com.palantir.conjure.either.Either)1 EnumValueDefinition (com.palantir.conjure.spec.EnumValueDefinition)1 ExternalReference (com.palantir.conjure.spec.ExternalReference)1 FieldDefinition (com.palantir.conjure.spec.FieldDefinition)1 FieldName (com.palantir.conjure.spec.FieldName)1 ListType (com.palantir.conjure.spec.ListType)1 MapType (com.palantir.conjure.spec.MapType)1 OptionalType (com.palantir.conjure.spec.OptionalType)1