# This file defines consumer ProGuard rules for the "networking" module.
# Be very specific here on keeping ONLY SDK related classes.
#
# Reason:
# When ProGuard processes an app, it aggregates rules from the app’s own ProGuard configuration
# and from each SDK’s "consumer-proguard-rules.pro" file.
# If we have too broad or generic rules in our consumer files, they may inadvertently match classes
# from app's code and it's dependent libraries, leading to enormous increase in its final APK size.

##---------- Begin: ProGuard rules for kotlinx serialization ----------
# Keep `Companion` object fields of serializable classes.
# This avoids serializer lookup through `getDeclaredClasses` as done for named companion objects.
-if @kotlinx.serialization.Serializable class com.linkedin.audiencenetwork.networking.**
-keepclassmembers class <1> {
   static <1>$Companion Companion;
}

# Keep `serializer()` on companion objects (both default and named) of serializable classes.
-if @kotlinx.serialization.Serializable class com.linkedin.audiencenetwork.networking.** {
   static **$* *;
}
-keepclassmembers class <2>$<3> {
   kotlinx.serialization.KSerializer serializer(...);
}

# Keep `INSTANCE.serializer()` of serializable objects.
-if @kotlinx.serialization.Serializable class com.linkedin.audiencenetwork.networking.** {
   public static ** INSTANCE;
}
-keepclassmembers class <1> {
   public static <1> INSTANCE;
   kotlinx.serialization.KSerializer serializer(...);
}

# @Serializable and @Polymorphic are used at runtime for polymorphic serialization.
-keepattributes RuntimeVisibleAnnotations,AnnotationDefault
##---------- End: ProGuard rules for kotlinx serialization ----------
