@Value.Immutable @ConjureImmutablesStyle public interface DateTimeType extends ConjureType { @Override default <T> T visit(ConjureTypeVisitor<T> visitor) { return visitor.visitDateTime(this); } // marker interface static DateTimeType of() { return ImmutableDateTimeType.builder().build(); } }
@Value.Immutable @ConjureImmutablesStyle public interface ForeignReferenceType extends ReferenceType { Namespace namespace(); @Override default <T> T visit(ConjureTypeVisitor<T> visitor) { return visitor.visitForeignReference(this); } static ForeignReferenceType of(Namespace namespace, TypeName type) { return ImmutableForeignReferenceType.builder().namespace(namespace).type(type).build(); } }
@Value.Immutable @ConjureImmutablesStyle public interface AnyType extends ConjureType { @Override default <T> T visit(ConjureTypeVisitor<T> visitor) { return visitor.visitAny(this); } // marker interface static AnyType of() { return ImmutableAnyType.builder().build(); } }
@Value.Immutable @ConjureImmutablesStyle public interface BinaryType extends ConjureType { // marker interface @Override default <T> T visit(ConjureTypeVisitor<T> visitor) { return visitor.visitBinary(this); } static BinaryType of() { return ImmutableBinaryType.builder().build(); } }
@Value.Immutable @ConjureImmutablesStyle public interface SetType extends ConjureType { @JsonProperty("item-type") ConjureType itemType(); @Override default <T> T visit(ConjureTypeVisitor<T> visitor) { return visitor.visitSet(this); } static SetType of(ConjureType itemType) { return ImmutableSetType.builder().itemType(itemType).build(); } }
@Value.Immutable @ConjureImmutablesStyle public interface OptionalType extends ConjureType { @JsonProperty("item-type") ConjureType itemType(); @Override default <T> T visit(ConjureTypeVisitor<T> visitor) { return visitor.visitOptional(this); } static OptionalType of(ConjureType itemType) { return ImmutableOptionalType.builder().itemType(itemType).build(); } }
@Value.Immutable @ConjureImmutablesStyle public interface ListType extends ConjureType { @JsonProperty("item-type") ConjureType itemType(); @Override default <T> T visit(ConjureTypeVisitor<T> visitor) { return visitor.visitList(this); } static ListType of(ConjureType itemType) { return ImmutableListType.builder().itemType(itemType).build(); } }
@Value.Immutable @ConjureImmutablesStyle public interface MapType extends ConjureType { @JsonProperty("key-type") ConjureType keyType(); @JsonProperty("value-type") ConjureType valueType(); @Override default <T> T visit(ConjureTypeVisitor<T> visitor) { return visitor.visitMap(this); } static MapType of(ConjureType keyType, ConjureType valueType) { return ImmutableMapType.builder().keyType(keyType).valueType(valueType).build(); } }
@JsonDeserialize(as = ImmutableExternalImportDefinition.class) @Value.Immutable @ConjureImmutablesStyle public interface ExternalImportDefinition { String java(); static ExternalImportDefinition of(String external) { return ImmutableExternalImportDefinition.builder().java(external).build(); } }
@JsonDeserialize(as = ImmutableConjureSourceFile.class) @Value.Immutable @ConjureImmutablesStyle public interface ConjureSourceFile { @Value.Default default TypesDefinition types() { return TypesDefinition.builder().build(); } Map<TypeName, ServiceDefinition> services(); static Builder builder() { return new Builder(); } class Builder extends ImmutableConjureSourceFile.Builder {} }
/** * Represents the name of an argument in an {@link EndpointDefinition}. */ @Value.Immutable @ConjureImmutablesStyle public abstract class ParameterName { public static final String PATTERN = "[a-z][a-z0-9]*([A-Z0-9][a-z0-9]+)*"; public static final Pattern ANCHORED_PATTERN = Pattern.compile("^" + PATTERN + "$"); public static final Pattern HEADER_PATTERN = Pattern.compile("^[A-Z][a-zA-Z0-9]*(-[A-Z][a-zA-Z0-9]*)*$"); @JsonValue public abstract String name(); @JsonCreator public static ParameterName of(String name) { return ImmutableParameterName.builder().name(name).build(); } @Override public final String toString() { return name(); } }
/** * Represents a reference to a builtin type or a type defined local to the containing {@link ConjureSourceFile} (as * opposed to a {@link ForeignReferenceType} which references a type defined in an {@link * com.palantir.conjure.parser.types.TypesDefinition#conjureImports imported type}). */ @Value.Immutable @ConjureImmutablesStyle public interface LocalReferenceType extends ReferenceType { @Override default <T> T visit(ConjureTypeVisitor<T> visitor) { return visitor.visitLocalReference(this); } static LocalReferenceType of(TypeName type) { Optional<PrimitiveType> primitiveType = PrimitiveType.fromTypeName(type); if (primitiveType.isPresent()) { return primitiveType.get(); } return ImmutableLocalReferenceType.builder().type(type).build(); } }
/** * Represents the name of a namespace for conjure imports, cf. {@link TypesDefinition#conjureImports()}. */ @Value.Immutable @ConjureImmutablesStyle public abstract class Namespace { private static final Pattern NAMESPACE_PATTERN = Pattern.compile("^[_a-zA-Z][_a-zA-Z0-9]*$"); @JsonValue public abstract String name(); @Value.Check protected final void check() { Preconditions.checkArgument( NAMESPACE_PATTERN.matcher(name()).matches(), "Namespaces must match pattern %s: %s", NAMESPACE_PATTERN, name()); } @JsonCreator public static Namespace of(String name) { return ImmutableNamespace.builder().name(name).build(); } }
@JsonDeserialize(as = ImmutableNamedTypesDefinition.class) @JsonSerialize(as = ImmutableNamedTypesDefinition.class) @Value.Immutable @ConjureImmutablesStyle public interface NamedTypesDefinition { @JsonProperty("default-package") Optional<ConjurePackage> defaultConjurePackage(); Map<TypeName, BaseObjectTypeDefinition> objects(); Map<TypeName, ErrorTypeDefinition> errors(); static Builder builder() { return new Builder(); } class Builder extends ImmutableNamedTypesDefinition.Builder {} }
@JsonDeserialize(as = ImmutableEndpointDefinition.class) @Value.Immutable @ConjureImmutablesStyle public interface EndpointDefinition { RequestLineDefinition http(); Optional<AuthDefinition> auth(); Map<ParameterName, ArgumentDefinition> args(); Set<ConjureType> markers(); Optional<ConjureType> returns(); Optional<String> docs(); Optional<String> deprecated(); static Builder builder() { return new Builder(); } class Builder extends ImmutableEndpointDefinition.Builder {} }
@Value.Immutable @ConjureImmutablesStyle public interface RequestLineDefinition { String method(); PathString path(); static RequestLineDefinition of(String method, PathString path) { return ImmutableRequestLineDefinition.builder().method(method).path(path).build(); } @JsonCreator static RequestLineDefinition valueOf(String oneline) { String[] parts = oneline.split(" ", 2); checkArgument(parts.length == 2, "Request line must be of the form: [METHOD] [PATH], instead was '%s'", oneline); ConjureMetrics.incrementCounter(RequestLineDefinition.class, "method", parts[0]); return of(parts[0], PathString.of(parts[1])); } @JsonValue default String asString() { return String.format("%s %s", method(), path()); } }
@Value.Immutable @ConjureImmutablesStyle public interface ConjureImports { /** * The file from which types are to be imported. The path is relative to the directory in which the declaring * top-level ConjureSourceFile file lives. */ String file(); ConjureSourceFile conjure(); @JsonCreator static ConjureImports fromFile(String file) { return ImmutableConjureImports.builder() .file(file) // When deserializing this object from user-supplied conjure yaml, we just fill in the file. .conjure(ConjureSourceFile.builder().build()) .build(); } static ConjureImports withResolvedImports(String file, ConjureSourceFile conjureDefinition) { return ImmutableConjureImports.builder() .file(file) .conjure(conjureDefinition) .build(); } }
@JsonDeserialize(as = ImmutableAliasTypeDefinition.class) @Value.Immutable @ConjureImmutablesStyle public interface AliasTypeDefinition extends BaseObjectTypeDefinition { ConjureType alias(); @Override default <T> T visit(TypeDefinitionVisitor<T> visitor) { return visitor.visit(this); } static Builder builder() { return new Builder(); } static AliasTypeDefinition fromJson(JsonParser parser, TreeNode json) throws IOException { return parser.getCodec().treeToValue(json, AliasTypeDefinition.class); } class Builder extends ImmutableAliasTypeDefinition.Builder {} }
@JsonDeserialize(as = ImmutableExternalTypeDefinition.class) @Value.Immutable @ConjureImmutablesStyle public interface ExternalTypeDefinition { ExternalImportDefinition external(); @JsonProperty("base-type") @Value.Default default PrimitiveType baseType() { return PrimitiveType.ANY; } static ExternalTypeDefinition javaType(String external, PrimitiveType baseType) { return ImmutableExternalTypeDefinition.builder() .external(ExternalImportDefinition.of(external)) .baseType(baseType) .build(); } }
@JsonDeserialize(as = ImmutableEnumTypeDefinition.class) @Value.Immutable @ConjureImmutablesStyle public interface EnumTypeDefinition extends BaseObjectTypeDefinition { @JsonSetter(nulls = Nulls.FAIL, contentNulls = Nulls.FAIL) List<EnumValueDefinition> values(); @Override default <T> T visit(TypeDefinitionVisitor<T> visitor) { return visitor.visit(this); } static EnumTypeDefinition fromJson(JsonParser parser, TreeNode json) throws IOException { return parser.getCodec().treeToValue(json, EnumTypeDefinition.class); } static Builder builder() { return new Builder(); } class Builder extends ImmutableEnumTypeDefinition.Builder {} }