EnumVisitor.java
package com.fasterxml.jackson.dataformat.avro.schema;
import com.fasterxml.jackson.databind.BeanDescription;
import com.fasterxml.jackson.databind.JavaType;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.jsonFormatVisitors.JsonStringFormatVisitor;
import org.apache.avro.Schema;
import java.util.ArrayList;
import java.util.Set;
/**
* Specific visitor for Java Enum types that are to be exposed as
* Avro Enums. Used unless Java Enums are to be mapped to Avro Strings.
*
* @since 2.18
*/
public class EnumVisitor extends JsonStringFormatVisitor.Base
implements SchemaBuilder
{
protected final SerializerProvider _provider;
protected final JavaType _type;
protected final DefinedSchemas _schemas;
protected Set<String> _enums;
public EnumVisitor(SerializerProvider provider, DefinedSchemas schemas, JavaType t) {
_schemas = schemas;
_type = t;
_provider = provider;
}
@Override
public void enumTypes(Set<String> enums) {
_enums = enums;
}
@Override
public Schema builtAvroSchema() {
if (_enums == null) {
throw new IllegalStateException("Possible enum values cannot be null");
}
BeanDescription bean = _provider.getConfig().introspectClassAnnotations(_type);
Schema schema = AvroSchemaHelper.createEnumSchema(bean, new ArrayList<>(_enums));
_schemas.addSchema(_type, schema);
return schema;
}
}