package com.zendesk.maxwell.schema.columndef;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import java.io.IOException;
public class ColumnDefSerializer extends JsonSerializer<ColumnDef> {
@Override
public void serialize(ColumnDef def, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException {
jgen.writeStartObject();
jgen.writeStringField("type", def.type);
jgen.writeStringField("name", def.name);
if ( def instanceof StringColumnDef ) {
jgen.writeStringField("charset", ((StringColumnDef) def).charset);
} else if ( def instanceof IntColumnDef ) {
jgen.writeBooleanField("signed", ((IntColumnDef) def).isSigned());
} else if ( def instanceof BigIntColumnDef ) {
jgen.writeBooleanField("signed", ((BigIntColumnDef) def).isSigned());
} else if ( def instanceof EnumeratedColumnDef ) {
jgen.writeArrayFieldStart("enum-values");
for (String s : ((EnumeratedColumnDef) def).getEnumValues())
jgen.writeString(s);
jgen.writeEndArray();
} else if ( def instanceof ColumnDefWithLength ) {
// columnLength is a long but technically, it' not that long. It it were, we could
// need to use a string to represent it, instead of an integer, to avoid issues
// with Javascript when parsing long integers.
Long columnLength = ( (ColumnDefWithLength) def ).getColumnLength();
if ( columnLength != null )
jgen.writeNumberField("column-length", columnLength);
}
jgen.writeEndObject();
}
}