@Override public TypeName visitEnum(EnumDefinition value) { return value.getTypeName(); }
@Override public void validate(EnumDefinition definition) { definition.getValues().forEach(EnumValueDefinitionValidator::validateAll); } }
public static TypeDefinition parseEnumType( TypeName name, com.palantir.conjure.parser.types.complex.EnumTypeDefinition def) { EnumDefinition enumType = EnumDefinition.builder() .typeName(name) .values(def.values().stream().map(ConjureParserUtils::parseEnumValue).collect(Collectors.toList())) .docs(def.docs().map(Documentation::of)) .build(); EnumDefinitionValidator.validateAll(enumType); return TypeDefinition.enum_(enumType); }
@Test public void testUniqueEnumValues() { EnumDefinition.Builder definition = EnumDefinition.builder() .typeName(TypeName.of("Foo", "package")) .values(EnumValueDefinition.builder().value("FOO").build()) .values(EnumValueDefinition.builder().value("FOO").build()); assertThatThrownBy(() -> EnumDefinitionValidator.validateAll(definition.build())) .isInstanceOf(IllegalArgumentException.class) .hasMessage("Cannot declare a EnumTypeDefinition with duplicate enum values: FOO"); } }
@Override public TypeName visitEnum(EnumDefinition value) { return value.getTypeName(); }
@Override public void validate(EnumDefinition definition) { Set<String> enumValues = Sets.newHashSet(); for (EnumValueDefinition valueDef : definition.getValues()) { boolean unseen = enumValues.add(valueDef.getValue()); Preconditions.checkArgument(unseen, "Cannot declare a %s with duplicate enum values: %s", EnumTypeDefinition.class.getSimpleName(), valueDef.getValue()); } } }