// Path: src/main/java/com/at/avro/config/FormatterConfig.java
// public class FormatterConfig {
// 
//     private String indent;
//     private String lineSeparator;
//     private String colon;
//     private boolean prettyPrintFields;
//     private boolean prettyPrintSchema;
// 
//     private Map<Class, Formatter> formatters = new HashMap<Class, Formatter>() {{
//             put(AvroSchema.class, new SchemaFormatter());
//             put(AvroField.class, new FieldFormatter());
//             put(AvroType.class, new TypeFormatter());
//             put(Date.class, new DateFormatter());
//             put(Enum.class, new EnumFormatter());
//             put(Primitive.class, new PrimitiveFormatter());
//             put(Decimal.class, new DecimalFormatter());
//             put(Array.class, new ArrayFormatter());
//     }};
// 
//     private FormatterConfig() {
//     }
// 
//     public String indent() {
//         return indent;
//     }
// 
//     public String indent(int times) {
//         String result = "";
//         for (int i = 0; i < times; i++) {
//             result += indent();
//         }
//         return result;
//     }
// 
//     public String colon() {
//         return colon;
//     }
// 
//     public String lineSeparator() {
//         return lineSeparator;
//     }
// 
//     public boolean prettyPrintFields() {
//         return prettyPrintFields;
//     }
// 
//     public boolean prettyPrintSchema() {
//         return prettyPrintSchema;
//     }
// 
//     public <T> Formatter<T> getFormatter(T dto) {
//         if (!formatters.containsKey(dto.getClass())) {
//             throw new IllegalArgumentException("Formatter not found for " + dto.getClass().getSimpleName());
//         }
//         return formatters.get(dto.getClass());
//     }
// 
//     public static Builder builder() {
//         return new Builder();
//     }
// 
//     public static class Builder {
//         private Map<Class, Formatter> formatters = new HashMap<>();
//         private boolean prettyPrintSchema = true;
//         private boolean prettyPrintFields = false;
//         private boolean addSpaceAfterColon = true;
//         private String indent = "  ";
// 
//         public <T> Builder setFormatter(Class<T> dtoClass, Formatter<T> formatter) {
//             formatters.put(dtoClass, formatter);
//             return this;
//         }
// 
//         /** False - to print schema in one line, true - to print it nicely formatted. */
//         public Builder setPrettyPrintSchema(boolean prettyPrintSchema) {
//             this.prettyPrintSchema = prettyPrintSchema;
//             return this;
//         }
// 
//         /**
//          * When false - each field will be written as one line, even if pretty printing of schema is set to true.
//          * if prettyPrintSchema is false, prettyPrintFields is ignored.
//          */
//         public Builder setPrettyPrintFields(boolean prettyPrintFields) {
//             this.prettyPrintFields = prettyPrintFields;
//             return this;
//         }
// 
//         /** Set indent value for pretty printing. */
//         public Builder setIndent(String indent) {
//             this.indent = indent;
//             return this;
//         }
// 
//         public FormatterConfig build() {
//             FormatterConfig config = new FormatterConfig();
//             config.formatters.putAll(this.formatters);
//             config.lineSeparator = prettyPrintSchema ? "\n" : "";
//             config.colon = addSpaceAfterColon ? ": " : ":";
//             config.prettyPrintFields = prettyPrintFields && prettyPrintSchema;
//             config.prettyPrintSchema = prettyPrintSchema;
//             config.indent = prettyPrintSchema ? indent : "";
//             return config;
//         }
//     }
// }
// 
// Path: src/main/java/com/at/avro/types/Enum.java
// public class Enum extends Type {
// 
//     private final String name;
//     private final String[] symbols;
// 
//     public Enum(Column column) {
//         super("enum");
//         this.name = column.getName();
// 
//         String allowedValues = column.getAttribute("COLUMN_TYPE").toString();
//         this.symbols = allowedValues
//                 .replaceFirst("enum", "")
//                 .replaceFirst("ENUM", "")
//                 .replace(")", "")
//                 .replace("(", "")
//                 .split(",");
// 
//         for (int i = 0; i < symbols.length; i++) {
//             symbols[i] = symbols[i].trim().replaceAll("'", "");
//         }
//     }
// 
//     public String getName() {
//         return name;
//     }
// 
//     public String[] getSymbols() {
//         return symbols;
//     }
// 
//     @Override
//     public String toString() {
//         return super.toString() + ": " + getName() + "[" + Arrays.toString(getSymbols()) + "]";
//     }
// }


import com.at.avro.config.FormatterConfig;
import com.at.avro.types.Enum;
package com.at.avro.formatters;


/**
 * @author artur@callfire.com
 */
public class EnumFormatter implements Formatter<Enum> {
    @Override
// Path: src/main/java/com/at/avro/config/FormatterConfig.java
// public class FormatterConfig {
// 
//     private String indent;
//     private String lineSeparator;
//     private String colon;
//     private boolean prettyPrintFields;
//     private boolean prettyPrintSchema;
// 
//     private Map<Class, Formatter> formatters = new HashMap<Class, Formatter>() {{
//             put(AvroSchema.class, new SchemaFormatter());
//             put(AvroField.class, new FieldFormatter());
//             put(AvroType.class, new TypeFormatter());
//             put(Date.class, new DateFormatter());
//             put(Enum.class, new EnumFormatter());
//             put(Primitive.class, new PrimitiveFormatter());
//             put(Decimal.class, new DecimalFormatter());
//             put(Array.class, new ArrayFormatter());
//     }};
// 
//     private FormatterConfig() {
//     }
// 
//     public String indent() {
//         return indent;
//     }
// 
//     public String indent(int times) {
//         String result = "";
//         for (int i = 0; i < times; i++) {
//             result += indent();
//         }
//         return result;
//     }
// 
//     public String colon() {
//         return colon;
//     }
// 
//     public String lineSeparator() {
//         return lineSeparator;
//     }
// 
//     public boolean prettyPrintFields() {
//         return prettyPrintFields;
//     }
// 
//     public boolean prettyPrintSchema() {
//         return prettyPrintSchema;
//     }
// 
//     public <T> Formatter<T> getFormatter(T dto) {
//         if (!formatters.containsKey(dto.getClass())) {
//             throw new IllegalArgumentException("Formatter not found for " + dto.getClass().getSimpleName());
//         }
//         return formatters.get(dto.getClass());
//     }
// 
//     public static Builder builder() {
//         return new Builder();
//     }
// 
//     public static class Builder {
//         private Map<Class, Formatter> formatters = new HashMap<>();
//         private boolean prettyPrintSchema = true;
//         private boolean prettyPrintFields = false;
//         private boolean addSpaceAfterColon = true;
//         private String indent = "  ";
// 
//         public <T> Builder setFormatter(Class<T> dtoClass, Formatter<T> formatter) {
//             formatters.put(dtoClass, formatter);
//             return this;
//         }
// 
//         /** False - to print schema in one line, true - to print it nicely formatted. */
//         public Builder setPrettyPrintSchema(boolean prettyPrintSchema) {
//             this.prettyPrintSchema = prettyPrintSchema;
//             return this;
//         }
// 
//         /**
//          * When false - each field will be written as one line, even if pretty printing of schema is set to true.
//          * if prettyPrintSchema is false, prettyPrintFields is ignored.
//          */
//         public Builder setPrettyPrintFields(boolean prettyPrintFields) {
//             this.prettyPrintFields = prettyPrintFields;
//             return this;
//         }
// 
//         /** Set indent value for pretty printing. */
//         public Builder setIndent(String indent) {
//             this.indent = indent;
//             return this;
//         }
// 
//         public FormatterConfig build() {
//             FormatterConfig config = new FormatterConfig();
//             config.formatters.putAll(this.formatters);
//             config.lineSeparator = prettyPrintSchema ? "\n" : "";
//             config.colon = addSpaceAfterColon ? ": " : ":";
//             config.prettyPrintFields = prettyPrintFields && prettyPrintSchema;
//             config.prettyPrintSchema = prettyPrintSchema;
//             config.indent = prettyPrintSchema ? indent : "";
//             return config;
//         }
//     }
// }
// 
// Path: src/main/java/com/at/avro/types/Enum.java
// public class Enum extends Type {
// 
//     private final String name;
//     private final String[] symbols;
// 
//     public Enum(Column column) {
//         super("enum");
//         this.name = column.getName();
// 
//         String allowedValues = column.getAttribute("COLUMN_TYPE").toString();
//         this.symbols = allowedValues
//                 .replaceFirst("enum", "")
//                 .replaceFirst("ENUM", "")
//                 .replace(")", "")
//                 .replace("(", "")
//                 .split(",");
// 
//         for (int i = 0; i < symbols.length; i++) {
//             symbols[i] = symbols[i].trim().replaceAll("'", "");
//         }
//     }
// 
//     public String getName() {
//         return name;
//     }
// 
//     public String[] getSymbols() {
//         return symbols;
//     }
// 
//     @Override
//     public String toString() {
//         return super.toString() + ": " + getName() + "[" + Arrays.toString(getSymbols()) + "]";
//     }
// }


// Path: src/main/java/com/at/avro/formatters/EnumFormatter.java
import com.at.avro.config.FormatterConfig;
import com.at.avro.types.Enum;

package com.at.avro.formatters;


/**
 * @author artur@callfire.com
 */
public class EnumFormatter implements Formatter<Enum> {
    @Override
    public String toJson(Enum anEnum, FormatterConfig config) {