// Path: src/main/java/com/at/avro/types/Type.java
// public abstract class Type {
// 
//     protected final String primitiveType;
// 
//     public Type(String primitiveType) {
//         this.primitiveType = primitiveType;
//     }
// 
//     public String getPrimitiveType() {
//         return primitiveType;
//     }
// 
//     @Override
//     public String toString() {
//         return getClass().getSimpleName() + "(" + primitiveType + ")";
//     }
// }


import java.util.StringJoiner;
import com.at.avro.types.Type;
package com.at.avro;



/**
 * Represents a field type in avro schema.
 *
 * @author artur@callfire.com
 */
public class AvroType {

    private final Type type;
    private final boolean nullable;

    public AvroType(Type type, boolean nullable) {
        this.type = type;
        this.nullable = nullable;
    }

// Path: src/main/java/com/at/avro/types/Type.java
// public abstract class Type {
// 
//     protected final String primitiveType;
// 
//     public Type(String primitiveType) {
//         this.primitiveType = primitiveType;
//     }
// 
//     public String getPrimitiveType() {
//         return primitiveType;
//     }
// 
//     @Override
//     public String toString() {
//         return getClass().getSimpleName() + "(" + primitiveType + ")";
//     }
// }


// Path: src/main/java/com/at/avro/AvroType.java
import java.util.StringJoiner;
import com.at.avro.types.Type;

package com.at.avro;



/**
 * Represents a field type in avro schema.
 *
 * @author artur@callfire.com
 */
public class AvroType {

    private final Type type;
    private final boolean nullable;

    public AvroType(Type type, boolean nullable) {
        this.type = type;
        this.nullable = nullable;
    }

    public Type getType() {