Let’s say I have two modules, `shared` and `shared...
# kotlin-native
g
Let’s say I have two modules,
shared
and
shared-models
, each providing their own binary frameworks: “Shared” and “SharedModels” respectively. The
shared-models
contains a data class
Hello
, and the
shared
module implements
shared-models
and has a public method that takes
Hello
as a parameter. When these modules are exported to Swift, I see the following: • `SharedModels`:
public class Hello : KotlinBase
• `Shared`:
public class Shared_modelsHello : KotlinBase
• `Shared`:
open func update(state: Shared_modelsHello)
I was expecting this: • `SharedModels`:
public class Hello : KotlinBase
• `Shared`:
open func update(state: Hello)
Is this a design “limitation” (I think I saw something regarding this in the latest Kotlin Conf, but I could be mistaken)?
h
Yes it’s a current limitation. Each binary framework is compiled as „closed world“, so you can’t pass a custom type between two frameworks even it’s the same in Kotlin.
👍 1
g
@hfhbd do you happen to know the logic (or where can I find it) used to create those Class names? Examples: Kotlinx_serialization_coreSerializersModuleCollector Kotlinx_serialization_coreKSerializer Kotlinx_serialization_coreSerializationStrategy etc… from:
Copy code
package kotlinx.serialization.modules

import kotlinx.serialization.*
import kotlin.reflect.*

public interface SerializersModuleCollector {
https://github.com/Kotlin/kotlinx.serialization/blob/master/core/commonMain/src/kotlinx/serialization/modules/SerializersModuleCollector.kt transformed:
Copy code
/**
 * @note annotations
 *  kotlinx.serialization.ExperimentalSerializationApi
*/
public protocol Kotlinx_serialization_coreSerializersModuleCollector {

   
  func contextual(kClass: any KotlinKClass, provider: @escaping ([any Kotlinx_serialization_coreKSerializer]) -> any Kotlinx_serialization_coreKSerializer)

  func contextual(kClass: any KotlinKClass, serializer: any Kotlinx_serialization_coreKSerializer)

  func polymorphic(baseClass: any KotlinKClass, actualClass: any KotlinKClass, actualSerializer: any Kotlinx_serialization_coreKSerializer)

  @available(*, deprecated, message: "Deprecated in favor of function with more precise name: polymorphicDefaultDeserializer")
  func polymorphicDefault(baseClass: any KotlinKClass, defaultDeserializerProvider: @escaping (String?) -> (any Kotlinx_serialization_coreDeserializationStrategy)?)

  func polymorphicDefaultDeserializer(baseClass: any KotlinKClass, defaultDeserializerProvider: @escaping (String?) -> (any Kotlinx_serialization_coreDeserializationStrategy)?)

  func polymorphicDefaultSerializer(baseClass: any KotlinKClass, defaultSerializerProvider: @escaping (Any) -> (any Kotlinx_serialization_coreSerializationStrategy)?)
}
Thanks 🙌