@Override public TypeName visitUnion(UnionDefinition value) { return value.getTypeName(); }
public static TypeDefinition parseUnionType( TypeName name, com.palantir.conjure.parser.types.complex.UnionTypeDefinition def, ConjureTypeParserVisitor.ReferenceTypeResolver typeResolver) { UnionDefinition unionType = UnionDefinition.builder() .typeName(name) .union(parseField(def.union(), typeResolver)) .docs(def.docs().map(Documentation::of)) .build(); UnionDefinitionValidator.validateAll(unionType); return TypeDefinition.union(unionType); }
@Override public void validate(UnionDefinition definition) { definition.getUnion().stream().forEach(fieldDef -> { Preconditions.checkArgument(!fieldDef.getFieldName().get().endsWith("_"), "Union member key must not end with an underscore: %s", fieldDef.getFieldName().get()); }); }
@Test public void testUnionMemberKeyMustNotBeIllegalJavaIdentifier() { ImmutableList.of("%foo", "foo@").forEach(key -> { FieldDefinition fieldDefinition = FieldDefinition.builder() .fieldName(FieldName.of(key)) .type(Type.primitive(PrimitiveType.STRING)) .build(); assertThatThrownBy(() -> UnionDefinitionValidator.validateAll(UnionDefinition.builder() .union(fieldDefinition) .typeName(TypeName.of("string", "")) .build())) .isInstanceOf(IllegalArgumentException.class) .hasMessageStartingWith( String.format("Union member key must be a valid Java identifier: %s", key)); }); }
@Override public void validate(UnionDefinition definition) { definition.getUnion().stream().forEach(fieldDef -> { Preconditions.checkArgument(!Strings.isNullOrEmpty(fieldDef.getFieldName().get()), "Union member key must not be empty"); Preconditions.checkArgument(isValidJavaIdentifier(fieldDef.getFieldName().get()), "Union member key must be a valid Java identifier: %s", fieldDef.getFieldName().get()); } ); } }
@Test public void testUnionMemberKeyMustNotBeEmpty() { FieldDefinition fieldDefinition = FieldDefinition.builder() .fieldName(FieldName.of("")) .type(Type.primitive(PrimitiveType.STRING)) .build(); assertThatThrownBy(() -> UnionDefinitionValidator.validateAll(UnionDefinition.builder() .union(fieldDefinition) .typeName(TypeName.of("string", "")) .build())) .isInstanceOf(IllegalArgumentException.class) .hasMessageStartingWith("Union member key must not be empty"); }
@Override public TypeName visitUnion(UnionDefinition value) { return value.getTypeName(); }
@Test public void testUnionMemberKeyMustNotHaveTrailingUnderscore() { FieldDefinition fieldDefinition = FieldDefinition.builder() .fieldName(FieldName.of("foo_")) .type(Type.primitive(PrimitiveType.STRING)) .build(); assertThatThrownBy(() -> UnionDefinitionValidator.validateAll(UnionDefinition.builder() .union(fieldDefinition) .typeName(TypeName.of("string", "")) .build())) .isInstanceOf(IllegalArgumentException.class) .hasMessageStartingWith("Union member key must not end with an underscore: foo_"); } }