-keepclassmembers enum ir.metrix.** { *; }

-keep class * extends ir.metrix.internal.init.MetrixComponentInitializer

-keep class * extends ir.metrix.utils.common.di.Provider { *; }

# Keep Exception names
-keepnames class ir.metrix.** extends java.lang.Exception

# -- Moshi --
-dontwarn okio.**
-dontwarn javax.annotation.**
-keepclasseswithmembers class * {
    @com.squareup.moshi.* <methods>;
}
-keep @com.squareup.moshi.JsonQualifier interface *

-keep class **JsonAdapter {
    <init>(...);
    <fields>;
}
-keepnames @com.squareup.moshi.JsonClass class *

# Moshi's generated adapters invoke the Kotlin synthetic "defaults" constructor
# (..., int, int, DefaultConstructorMarker) reflectively for data classes that
# declare default parameter values. Without keeping these constructors R8 strips
# or rewrites them, causing NoSuchMethodException at runtime during deserialization.
-keepclassmembers,allowobfuscation @com.squareup.moshi.JsonClass class * {
    synthetic <init>(...);
}
# Keep the primary constructors of Moshi model classes as well, so the generated
# adapter can construct instances when all values are present.
-keepclassmembers,allowobfuscation @com.squareup.moshi.JsonClass class * {
    <init>(...);
}

-dontwarn org.codehaus.mojo.animal_sniffer.*

# Fix application release build problem with R8
-keep class io.reactivex.rxjava3.disposables.RunnableDisposable { <init>(...); }

### for gradle 8 and after

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

# A resource is loaded with a relative path so the package of this class must be preserved.
-keepnames class okhttp3.internal.publicsuffix.PublicSuffixDatabase

# Animal Sniffer compileOnly dependency to ensure APIs are compatible with older versions of Java.
-dontwarn org.codehaus.mojo.animal_sniffer.*

# OkHttp platform used only on JVM and when Conscrypt and other security providers are available.
-dontwarn okhttp3.internal.platform.**
-dontwarn org.conscrypt.**
-dontwarn org.bouncycastle.**
-dontwarn org.openjsse.**

-dontwarn com.squareup.okhttp.**
-keep class com.squareup.okhttp.** { *; }
-keep interface com.squareup.okhttp.** { *; }
-keepattributes Signature
-keepattributes Annotation
-keep class okhttp3.** { *; }
-keep interface okhttp3.** { *; }
-dontwarn okhttp3.**

-dontwarn retrofit2.**
-keep class retrofit2.** { *; }
-keepattributes Signature
-keepattributes Exceptions

-keeppackagenames ir.metrix.analytics

-keep class ir.metrix.analytics.MetrixAnalytics { *; }
-keep class ir.metrix.analytics.MetrixAnalytics$User { *; }

-keep class ir.metrix.analytics.unity.* { *; }
-if class ir.metrix.analytics.messaging.Identify
-keepnames class ir.metrix.analytics.messaging.Identify
-if class ir.metrix.analytics.messaging.Identify
-keep class ir.metrix.analytics.messaging.IdentifyJsonAdapter {
    public <init>(com.squareup.moshi.Moshi);
}
-if class ir.metrix.analytics.messaging.Identify
-keepnames class kotlin.jvm.internal.DefaultConstructorMarker
-if class ir.metrix.analytics.messaging.Identify
-keepclassmembers class ir.metrix.analytics.messaging.Identify {
    public synthetic <init>(java.lang.String,int,kotlin.jvm.internal.DefaultConstructorMarker);
}

-if class ir.metrix.analytics.messaging.Action
-keepnames class ir.metrix.analytics.messaging.Action
-if class ir.metrix.analytics.messaging.Action
-keep class ir.metrix.analytics.messaging.ActionJsonAdapter {
    public <init>(com.squareup.moshi.Moshi);
}
-if class ir.metrix.analytics.messaging.Action
-keepnames class kotlin.jvm.internal.DefaultConstructorMarker
-if class ir.metrix.analytics.messaging.Action
-keepclassmembers class ir.metrix.analytics.messaging.Action {
    public synthetic <init>(java.lang.String,java.lang.String,java.util.Map,int,kotlin.jvm.internal.DefaultConstructorMarker);
}

-if class ir.metrix.analytics.messaging.Revenue
-keepnames class ir.metrix.analytics.messaging.Revenue
-if class ir.metrix.analytics.messaging.Revenue
-keep class ir.metrix.analytics.messaging.RevenueJsonAdapter {
    public <init>(com.squareup.moshi.Moshi);
}
-if class ir.metrix.analytics.messaging.Revenue
-keepnames class kotlin.jvm.internal.DefaultConstructorMarker
-if class ir.metrix.analytics.messaging.Revenue
-keepclassmembers class ir.metrix.analytics.messaging.Revenue {
    public synthetic <init>(java.lang.String,java.lang.String,double,ir.metrix.analytics.messaging.RevenueCurrency,int,kotlin.jvm.internal.DefaultConstructorMarker);
}

-if class ir.metrix.analytics.messaging.User
-keepnames class ir.metrix.analytics.messaging.User
-if class ir.metrix.analytics.messaging.User
-keep class ir.metrix.analytics.messaging.UserJsonAdapter {
    public <init>(com.squareup.moshi.Moshi);
}
-if class ir.metrix.analytics.messaging.User
-keepnames class kotlin.jvm.internal.DefaultConstructorMarker
-if class ir.metrix.analytics.messaging.User
-keepclassmembers class ir.metrix.analytics.messaging.User {
    public synthetic <init>(java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,ir.metrix.analytics.messaging.UserGender,ir.metrix.utils.common.Time,java.lang.String,java.util.Set,java.util.Map,int,kotlin.jvm.internal.DefaultConstructorMarker);
}

-if class ir.metrix.analytics.messaging.Session
-keepnames class ir.metrix.analytics.messaging.Session
-if class ir.metrix.analytics.messaging.Session
-keep class ir.metrix.analytics.messaging.SessionJsonAdapter {
    public <init>(com.squareup.moshi.Moshi);
}
-if class ir.metrix.analytics.messaging.Session
-keepnames class kotlin.jvm.internal.DefaultConstructorMarker
-if class ir.metrix.analytics.messaging.Session
-keepclassmembers class ir.metrix.analytics.messaging.Session {
    public synthetic <init>(java.lang.String,int,java.util.List,ir.metrix.utils.common.Time,int,kotlin.jvm.internal.DefaultConstructorMarker);
}


