-keepclassmembers class co.paystack.android.api.model.** { <fields>; }
-keepclassmembers class co.paystack.android.model.** { <fields>; }


# Retrofit does reflection on generic parameters. InnerClasses is required to use Signature and
# EnclosingMethod is required to use InnerClasses.
-keepattributes Signature, InnerClasses, EnclosingMethod

# Retrofit does reflection on method and parameter annotations.
-keepattributes RuntimeVisibleAnnotations, RuntimeVisibleParameterAnnotations

# Retain service method parameters when optimizing.
-keepclassmembers,allowshrinking,allowobfuscation interface * {
    @retrofit2.http.* <methods>;
}


##MOSHI
# JSR 305 annotations are for embedding nullability information.
-dontwarn javax.annotation.**

-keepclasseswithmembers class * {
    @com.squareup.moshi.* <methods>;
}

-keep @com.squareup.moshi.JsonQualifier interface *

# Enum field names are used by the integrated EnumJsonAdapter.
# Annotate enums with @JsonClass(generateAdapter = false) to use them with Moshi.
-keepclassmembers @com.squareup.moshi.JsonClass class * extends java.lang.Enum {
    <fields>;
}

# The name of @JsonClass types is used to look up the generated adapter.
-keepnames @com.squareup.moshi.JsonClass class *

# Retain generated target class's synthetic defaults constructor and keep DefaultConstructorMarker's
# name. We will look this up reflectively to invoke the type's constructor.
#
# We can't _just_ keep the defaults constructor because Proguard/R8's spec doesn't allow wildcard
# matching preceding parameters.
-keepnames class kotlin.jvm.internal.DefaultConstructorMarker
-keepclassmembers @com.squareup.moshi.JsonClass @kotlin.Metadata class * {
    synthetic <init>(...);
}

# Retain generated JsonAdapters if annotated type is retained.
-if @com.squareup.moshi.JsonClass class *
-keep class <1>JsonAdapter {
    <init>(...);
    <fields>;
}
-if @com.squareup.moshi.JsonClass class **$*
-keep class <1>_<2>JsonAdapter {
    <init>(...);
    <fields>;
}
-if @com.squareup.moshi.JsonClass class **$*$*
-keep class <1>_<2>_<3>JsonAdapter {
    <init>(...);
    <fields>;
}
-if @com.squareup.moshi.JsonClass class **$*$*$*
-keep class <1>_<2>_<3>_<4>JsonAdapter {
    <init>(...);
    <fields>;
}
-if @com.squareup.moshi.JsonClass class **$*$*$*$*
-keep class <1>_<2>_<3>_<4>_<5>JsonAdapter {
    <init>(...);
    <fields>;
}
-if @com.squareup.moshi.JsonClass class **$*$*$*$*$*
-keep class <1>_<2>_<3>_<4>_<5>_<6>JsonAdapter {
    <init>(...);
    <fields>;
}

-keepclassmembers class kotlin.Metadata {
    public <methods>;
}
-if class co.paystack.android.api.service.converter.WrappedResponse
-keepnames class co.paystack.android.api.service.converter.WrappedResponse
-if class co.paystack.android.api.service.converter.WrappedResponse
-keep class co.paystack.android.api.service.converter.WrappedResponseJsonAdapter {
    public <init>(com.squareup.moshi.Moshi,java.lang.reflect.Type[]);
}

-if class co.paystack.android.api.request.ChargeParams
-keepnames class co.paystack.android.api.request.ChargeParams
-if class co.paystack.android.api.request.ChargeParams
-keep class co.paystack.android.api.request.ChargeParamsJsonAdapter {
    public <init>(com.squareup.moshi.Moshi);
}
-if class co.paystack.android.api.request.ChargeParams
-keepnames class kotlin.jvm.internal.DefaultConstructorMarker
-if class co.paystack.android.api.request.ChargeParams
-keepclassmembers class co.paystack.android.api.request.ChargeParams {
    public synthetic <init>(java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,int,kotlin.jvm.internal.DefaultConstructorMarker);
}

-if class co.paystack.android.model.AvsState
-keepnames class co.paystack.android.model.AvsState
-if class co.paystack.android.model.AvsState
-keep class co.paystack.android.model.AvsStateJsonAdapter {
    public <init>(com.squareup.moshi.Moshi);
}

-if class co.paystack.android.api.model.ChargeResponse
-keepnames class co.paystack.android.api.model.ChargeResponse
-if class co.paystack.android.api.model.ChargeResponse
-keep class co.paystack.android.api.model.ChargeResponseJsonAdapter {
    public <init>(com.squareup.moshi.Moshi);
}
-if class co.paystack.android.api.model.ChargeResponse
-keepnames class kotlin.jvm.internal.DefaultConstructorMarker
-if class co.paystack.android.api.model.ChargeResponse
-keepclassmembers class co.paystack.android.api.model.ChargeResponse {
    public synthetic <init>(java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,int,kotlin.jvm.internal.DefaultConstructorMarker);
}

-if class co.paystack.android.api.request.TransactionInitRequestBody
-keepnames class co.paystack.android.api.request.TransactionInitRequestBody
-if class co.paystack.android.api.request.TransactionInitRequestBody
-keep class co.paystack.android.api.request.TransactionInitRequestBodyJsonAdapter {
    public <init>(com.squareup.moshi.Moshi);
}

-if class co.paystack.android.api.model.TransactionInitResponse
-keepnames class co.paystack.android.api.model.TransactionInitResponse
-if class co.paystack.android.api.model.TransactionInitResponse
-keep class co.paystack.android.api.model.TransactionInitResponseJsonAdapter {
    public <init>(com.squareup.moshi.Moshi);
}

-if class co.paystack.android.api.model.TransactionApiResponse
-keepnames class co.paystack.android.api.model.TransactionApiResponse
-if class co.paystack.android.api.model.TransactionApiResponse
-keep class co.paystack.android.api.model.TransactionApiResponseJsonAdapter {
    public <init>(com.squareup.moshi.Moshi);
}
-if class co.paystack.android.api.model.TransactionApiResponse
-keepnames class kotlin.jvm.internal.DefaultConstructorMarker
-if class co.paystack.android.api.model.TransactionApiResponse
-keepclassmembers class co.paystack.android.api.model.TransactionApiResponse {
    public synthetic <init>(java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,int,kotlin.jvm.internal.DefaultConstructorMarker);
}

-if class co.paystack.android.api.request.ValidateTransactionParams
-keepnames class co.paystack.android.api.request.ValidateTransactionParams
-if class co.paystack.android.api.request.ValidateTransactionParams
-keep class co.paystack.android.api.request.ValidateTransactionParamsJsonAdapter {
    public <init>(com.squareup.moshi.Moshi);
}
-if class co.paystack.android.api.request.ValidateTransactionParams
-keepnames class kotlin.jvm.internal.DefaultConstructorMarker
-if class co.paystack.android.api.request.ValidateTransactionParams
-keepclassmembers class co.paystack.android.api.request.ValidateTransactionParams {
    public synthetic <init>(java.lang.String,java.lang.String,java.lang.String,int,kotlin.jvm.internal.DefaultConstructorMarker);
}


