# Consumer ProGuard rules for kotzilla-core
# These rules will be applied to apps that consume this library

### Generated Config (loaded via Class.forName in GeneratedConfigLoader) ###

-keep class io.kotzilla.generated.KotzillaGeneratedConfig { *; }
-keep class io.kotzilla.generated.KotzillaGeneratedConfigKt { *; }

### Kotlinx Serialization ###

-if @kotlinx.serialization.Serializable class **
-keepclassmembers class <1> {
    static <1>$Companion Companion;
}

-keepnames @kotlinx.serialization.internal.NamedCompanion class *
-if @kotlinx.serialization.internal.NamedCompanion class *
-keepclassmembernames class * {
    static <1> *;
}

-if @kotlinx.serialization.Serializable class ** {
    static **$* *;
}
-keepclassmembers class <2>$<3> {
    kotlinx.serialization.KSerializer serializer(...);
}

-if @kotlinx.serialization.Serializable class ** {
    public static ** INSTANCE;
}
-keepclassmembers class <1> {
    public static <1> INSTANCE;
    kotlinx.serialization.KSerializer serializer(...);
}

-keepattributes RuntimeVisibleAnnotations,AnnotationDefault

-dontnote kotlinx.serialization.**
-dontwarn kotlinx.serialization.internal.ClassValueReferences

-keepclassmembers public class **$serializer {
    private ** descriptor;
}

### KotzillaConfigRegistry (loaded by generated code via static init) ###

-keep class io.kotzilla.sdk.KotzillaConfigRegistry { public *; }
-keep class io.kotzilla.sdk.KotzillaConfigRegistry$GeneratedConfig { *; }

### Multiplatform Settings (russhwolf) ###

-keep class com.russhwolf.settings.** { *; }

### Koin Module Functions (reflection-based loading) ###

-keep public class io.kotzilla.sdk.di.CoreModuleKt { public static ** coreModule(); }
-keep public class io.kotzilla.sdk.android.di.AndroidModuleKt { public static ** androidModule(); }
