Skip to content

Commit

Permalink
Fix: Don't allow a union variant called 'type' (#422)
Browse files Browse the repository at this point in the history
  • Loading branch information
dansanduleac authored and iamdanfox committed Oct 25, 2019
1 parent 1708e53 commit 6c860f0
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 8 deletions.
6 changes: 6 additions & 0 deletions changelog/@unreleased/pr-422.v2.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
type: fix
fix:
description: Don't allow a union variant called `type` as we don't know how that
should be serialized.
links:
- https://github.com/palantir/conjure/pull/422
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,8 @@
@com.google.errorprone.annotations.Immutable
public enum UnionDefinitionValidator implements ConjureValidator<UnionDefinition> {
KEY_SYNTAX(new KeySyntaxValidator()),
NO_TRAILING_UNDERSCORE(new NoTrailingUnderscoreValidator());
NO_TRAILING_UNDERSCORE(new NoTrailingUnderscoreValidator()),
NO_CLOBBER_TYPE(new NoClobberTypeValidator());

public static void validateAll(UnionDefinition definition) {
for (UnionDefinitionValidator validator : values()) {
Expand Down Expand Up @@ -74,13 +75,24 @@ private static boolean isValidJavaIdentifier(String 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());
}
);
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());
});
}
}

@com.google.errorprone.annotations.Immutable
private static final class NoClobberTypeValidator implements ConjureValidator<UnionDefinition> {

@Override
public void validate(UnionDefinition definition) {
definition.getUnion().stream().forEach(fieldDef -> {
Preconditions.checkArgument(!fieldDef.getFieldName().get().equals("type"),
"Union member key must not be 'type'");
});
}
}
}

0 comments on commit 6c860f0

Please sign in to comment.