// Path: src/main/java/io/datanerds/avropatch/value/conversion/BigDecimalConversion.java
// public class BigDecimalConversion extends Conversion<BigDecimal> implements BigDecimalType {
// 
//     static {
//         LogicalTypes.register(NAME, schema -> LOGICAL_TYPE);
//     }
// 
//     @Override
//     public Schema getRecommendedSchema() {
//         return SCHEMA;
//     }
// 
//     @Override
//     public Class<BigDecimal> getConvertedType() {
//         return BigDecimal.class;
//     }
// 
//     @Override
//     public String getLogicalTypeName() {
//         return NAME;
//     }
// 
//     @Override
//     public BigDecimal fromRecord(IndexedRecord value, Schema schema, LogicalType type) {
//         BigInteger unscaledValue = (BigInteger)value.get(0);
//         int scale = (int) value.get(1);
//         return new BigDecimal(unscaledValue, scale);
//     }
// 
//     @Override
//     public IndexedRecord toRecord(BigDecimal value, Schema schema, LogicalType type) {
//         GenericData.Record record = new GenericData.Record(schema);
//         record.put(0, value.unscaledValue());
//         record.put(1, value.scale());
//         return record;
//     }
// }
// 
// Path: src/main/java/io/datanerds/avropatch/value/conversion/BigIntegerConversion.java
// public class BigIntegerConversion extends Conversion<BigInteger> implements BigIntegerType {
// 
//     static {
//         LogicalTypes.register(NAME, schema -> LOGICAL_TYPE);
//     }
// 
//     @Override
//     public Schema getRecommendedSchema() {
//         return SCHEMA;
//     }
// 
//     @Override
//     public Class<BigInteger> getConvertedType() {
//         return BigInteger.class;
//     }
// 
//     @Override
//     public String getLogicalTypeName() {
//         return NAME;
//     }
// 
//     @Override
//     public BigInteger fromBytes(ByteBuffer value, Schema schema, LogicalType type)  {
//         return new BigInteger(value.array());
//     }
// 
//     @Override
//     public ByteBuffer toBytes(BigInteger value, Schema schema, LogicalType type)  {
//         return ByteBuffer.wrap(value.toByteArray());
//     }
// }
// 
// Path: src/main/java/io/datanerds/avropatch/value/conversion/DateConversion.java
// public class DateConversion extends Conversion<Date> implements TimestampType {
// 
//     static {
//         LogicalTypes.register(NAME, schema -> LOGICAL_TYPE);
//     }
// 
//     @Override
//     public Schema getRecommendedSchema() {
//         return SCHEMA;
//     }
// 
//     @Override
//     public Class<Date> getConvertedType() {
//         return Date.class;
//     }
// 
//     @Override
//     public String getLogicalTypeName() {
//         return NAME;
//     }
// 
//     @Override
//     public GenericFixed toFixed(Date value, Schema schema, LogicalType type) {
//         return new GenericFixed() {
//             @Override
//             public byte[] bytes() {
//                 ByteBuffer buffer = ByteBuffer.allocate(SIZE);
//                 buffer.putLong(value.getTime());
//                 return buffer.array();
//             }
// 
//             @Override
//             public Schema getSchema() {
//                 return SCHEMA;
//             }
//         };
//     }
// 
//     @Override
//     public Date fromFixed(GenericFixed value, Schema schema, LogicalType type) {
//         ByteBuffer buffer = ByteBuffer.wrap(value.bytes());
//         long time = buffer.getLong();
//         return new Date(time);
//     }
// }
// 
// Path: src/main/java/io/datanerds/avropatch/value/conversion/UUIDConversion.java
// public class UUIDConversion extends Conversion<UUID> implements UuidType {
// 
//     @Override
//     public Schema getRecommendedSchema() {
//         return SCHEMA;
//     }
// 
//     @Override
//     public Class<UUID> getConvertedType() {
//         return UUID.class;
//     }
// 
//     @Override
//     public String getLogicalTypeName() {
//         return NAME;
//     }
// 
//     @Override
//     public GenericFixed toFixed(UUID value, Schema schema, LogicalType type) {
//         return new GenericFixed() {
//             @Override
//             public byte[] bytes() {
//                 ByteBuffer buffer = ByteBuffer.allocate(SIZE);
//                 buffer.putLong(value.getLeastSignificantBits());
//                 buffer.putLong(value.getMostSignificantBits());
//                 return buffer.array();
//             }
// 
//             @Override
//             public Schema getSchema() {
//                 return SCHEMA;
//             }
//         };
//     }
// 
//     @Override
//     public UUID fromFixed(GenericFixed value, Schema schema, LogicalType type) {
//         ByteBuffer buffer = ByteBuffer.wrap(value.bytes());
//         long leastSignificantBits = buffer.getLong();
//         long mostSignificantBits = buffer.getLong();
//         return new UUID(mostSignificantBits, leastSignificantBits);
//     }
// }


import io.datanerds.avropatch.value.conversion.BigDecimalConversion;
import io.datanerds.avropatch.value.conversion.BigIntegerConversion;
import io.datanerds.avropatch.value.conversion.DateConversion;
import io.datanerds.avropatch.value.conversion.UUIDConversion;
import org.apache.avro.Conversion;
import org.apache.avro.reflect.ReflectData;
import java.util.Arrays;
import java.util.List;
package io.datanerds.avropatch.value;



public final class AvroData extends ReflectData {

    private static final List<Conversion<?>> CONVERTERS = Arrays.asList(
            new DateConversion(),
            new BigIntegerConversion(),
// Path: src/main/java/io/datanerds/avropatch/value/conversion/BigDecimalConversion.java
// public class BigDecimalConversion extends Conversion<BigDecimal> implements BigDecimalType {
// 
//     static {
//         LogicalTypes.register(NAME, schema -> LOGICAL_TYPE);
//     }
// 
//     @Override
//     public Schema getRecommendedSchema() {
//         return SCHEMA;
//     }
// 
//     @Override
//     public Class<BigDecimal> getConvertedType() {
//         return BigDecimal.class;
//     }
// 
//     @Override
//     public String getLogicalTypeName() {
//         return NAME;
//     }
// 
//     @Override
//     public BigDecimal fromRecord(IndexedRecord value, Schema schema, LogicalType type) {
//         BigInteger unscaledValue = (BigInteger)value.get(0);
//         int scale = (int) value.get(1);
//         return new BigDecimal(unscaledValue, scale);
//     }
// 
//     @Override
//     public IndexedRecord toRecord(BigDecimal value, Schema schema, LogicalType type) {
//         GenericData.Record record = new GenericData.Record(schema);
//         record.put(0, value.unscaledValue());
//         record.put(1, value.scale());
//         return record;
//     }
// }
// 
// Path: src/main/java/io/datanerds/avropatch/value/conversion/BigIntegerConversion.java
// public class BigIntegerConversion extends Conversion<BigInteger> implements BigIntegerType {
// 
//     static {
//         LogicalTypes.register(NAME, schema -> LOGICAL_TYPE);
//     }
// 
//     @Override
//     public Schema getRecommendedSchema() {
//         return SCHEMA;
//     }
// 
//     @Override
//     public Class<BigInteger> getConvertedType() {
//         return BigInteger.class;
//     }
// 
//     @Override
//     public String getLogicalTypeName() {
//         return NAME;
//     }
// 
//     @Override
//     public BigInteger fromBytes(ByteBuffer value, Schema schema, LogicalType type)  {
//         return new BigInteger(value.array());
//     }
// 
//     @Override
//     public ByteBuffer toBytes(BigInteger value, Schema schema, LogicalType type)  {
//         return ByteBuffer.wrap(value.toByteArray());
//     }
// }
// 
// Path: src/main/java/io/datanerds/avropatch/value/conversion/DateConversion.java
// public class DateConversion extends Conversion<Date> implements TimestampType {
// 
//     static {
//         LogicalTypes.register(NAME, schema -> LOGICAL_TYPE);
//     }
// 
//     @Override
//     public Schema getRecommendedSchema() {
//         return SCHEMA;
//     }
// 
//     @Override
//     public Class<Date> getConvertedType() {
//         return Date.class;
//     }
// 
//     @Override
//     public String getLogicalTypeName() {
//         return NAME;
//     }
// 
//     @Override
//     public GenericFixed toFixed(Date value, Schema schema, LogicalType type) {
//         return new GenericFixed() {
//             @Override
//             public byte[] bytes() {
//                 ByteBuffer buffer = ByteBuffer.allocate(SIZE);
//                 buffer.putLong(value.getTime());
//                 return buffer.array();
//             }
// 
//             @Override
//             public Schema getSchema() {
//                 return SCHEMA;
//             }
//         };
//     }
// 
//     @Override
//     public Date fromFixed(GenericFixed value, Schema schema, LogicalType type) {
//         ByteBuffer buffer = ByteBuffer.wrap(value.bytes());
//         long time = buffer.getLong();
//         return new Date(time);
//     }
// }
// 
// Path: src/main/java/io/datanerds/avropatch/value/conversion/UUIDConversion.java
// public class UUIDConversion extends Conversion<UUID> implements UuidType {
// 
//     @Override
//     public Schema getRecommendedSchema() {
//         return SCHEMA;
//     }
// 
//     @Override
//     public Class<UUID> getConvertedType() {
//         return UUID.class;
//     }
// 
//     @Override
//     public String getLogicalTypeName() {
//         return NAME;
//     }
// 
//     @Override
//     public GenericFixed toFixed(UUID value, Schema schema, LogicalType type) {
//         return new GenericFixed() {
//             @Override
//             public byte[] bytes() {
//                 ByteBuffer buffer = ByteBuffer.allocate(SIZE);
//                 buffer.putLong(value.getLeastSignificantBits());
//                 buffer.putLong(value.getMostSignificantBits());
//                 return buffer.array();
//             }
// 
//             @Override
//             public Schema getSchema() {
//                 return SCHEMA;
//             }
//         };
//     }
// 
//     @Override
//     public UUID fromFixed(GenericFixed value, Schema schema, LogicalType type) {
//         ByteBuffer buffer = ByteBuffer.wrap(value.bytes());
//         long leastSignificantBits = buffer.getLong();
//         long mostSignificantBits = buffer.getLong();
//         return new UUID(mostSignificantBits, leastSignificantBits);
//     }
// }


// Path: src/main/java/io/datanerds/avropatch/value/AvroData.java
import io.datanerds.avropatch.value.conversion.BigDecimalConversion;
import io.datanerds.avropatch.value.conversion.BigIntegerConversion;
import io.datanerds.avropatch.value.conversion.DateConversion;
import io.datanerds.avropatch.value.conversion.UUIDConversion;
import org.apache.avro.Conversion;
import org.apache.avro.reflect.ReflectData;
import java.util.Arrays;
import java.util.List;

package io.datanerds.avropatch.value;



public final class AvroData extends ReflectData {

    private static final List<Conversion<?>> CONVERTERS = Arrays.asList(
            new DateConversion(),
            new BigIntegerConversion(),
            new BigDecimalConversion(),