package co.smartreceipts.android.apis.gson; import android.support.annotation.NonNull; import com.google.common.base.Preconditions; import com.google.gson.FieldNamingPolicy; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import co.smartreceipts.android.model.Category; import co.smartreceipts.android.model.Column; import co.smartreceipts.android.model.ColumnDefinitions; import co.smartreceipts.android.model.PaymentMethod; import co.smartreceipts.android.model.Receipt; public class SmartReceiptsGsonBuilder { private final ColumnDefinitions<Receipt> mReceiptColumnDefinitions; public SmartReceiptsGsonBuilder(@NonNull ColumnDefinitions<Receipt> receiptColumnDefinitions) { mReceiptColumnDefinitions = Preconditions.checkNotNull(receiptColumnDefinitions); } @NonNull public Gson create() { final GsonBuilder builder = new GsonBuilder(); builder.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES); builder.registerTypeAdapter(Column.class, new ColumnGsonAdpater(mReceiptColumnDefinitions)); builder.registerTypeAdapter(PaymentMethod.class, new PaymentMethodGsonAdapter()); builder.registerTypeAdapter(Category.class, new CategoryGsonAdapter()); return builder.create(); } }