Coverage Summary for Class: DataModuleKt (cloud.mindbox.mobile_sdk.di.modules)

Class Method, % Branch, % Line, % Instruction, %
DataModuleKt 100% (1/1) 100% (1/1) 100% (6/6)
DataModuleKt$DataModule$1 8.3% (2/24) 62.7% (47/75) 84.8% (543/640)
DataModuleKt$DataModule$1$abTestValidator$2 0% (0/1) 0% (0/1) 0% (0/6)
DataModuleKt$DataModule$1$callbackRepository$2 0% (0/1) 0% (0/4) 0% (0/12)
DataModuleKt$DataModule$1$defaultDataManager$2 0% (0/1) 0% (0/4) 0% (0/12)
DataModuleKt$DataModule$1$featureToggleManager$2 0% (0/1) 0% (0/1) 0% (0/3)
DataModuleKt$DataModule$1$gson$2 100% (1/1) 100% (94/94) 100% (145/145)
DataModuleKt$DataModule$1$inAppConfigTtlValidator$2 0% (0/1) 0% (0/1) 0% (0/3)
DataModuleKt$DataModule$1$inAppContentFetcher$2 0% (0/1) 0% (0/2) 0% (0/6)
DataModuleKt$DataModule$1$inAppFailureTracker$2 0% (0/1) 0% (0/4) 0% (0/13)
DataModuleKt$DataModule$1$inAppGeoRepository$2 0% (0/1) 0% (0/6) 0% (0/19)
DataModuleKt$DataModule$1$inAppImageSizeStorage$2 0% (0/1) 0% (0/1) 0% (0/3)
DataModuleKt$DataModule$1$inAppMapper$2 0% (0/1) 0% (0/1) 0% (0/3)
DataModuleKt$DataModule$1$inAppMessageDelayedManager$2 0% (0/1) 0% (0/1) 0% (0/8)
DataModuleKt$DataModule$1$inAppRepository$2 0% (0/1) 0% (0/5) 0% (0/16)
DataModuleKt$DataModule$1$inAppSegmentationRepository$2 0% (0/1) 0% (0/4) 0% (0/12)
DataModuleKt$DataModule$1$inappSettingsManager$2 0% (0/1) 0% (0/1) 0% (0/6)
DataModuleKt$DataModule$1$inAppTargetingErrorRepository$2 0% (0/1) 0% (0/2) 0% (0/6)
DataModuleKt$DataModule$1$inAppValidator$2 0% (0/1) 0% (0/5) 0% (0/15)
DataModuleKt$DataModule$1$integerPositiveValidator$2 0% (0/1) 0% (0/1) 0% (0/3)
DataModuleKt$DataModule$1$jsonValidator$2 0% (0/1) 0% (0/1) 0% (0/3)
DataModuleKt$DataModule$1$maxInappsPerDayLimitChecker$2 0% (0/1) 0% (0/1) 0% (0/13)
DataModuleKt$DataModule$1$maxInappsPerSessionLimitChecker$2 0% (0/1) 0% (0/1) 0% (0/6)
DataModuleKt$DataModule$1$migrationManager$2 0% (0/1) 0% (0/1) 0% (0/7)
DataModuleKt$DataModule$1$mindboxNotificationManager$2 0% (0/1) 0% (0/3) 0% (0/10)
DataModuleKt$DataModule$1$minIntervalBetweenShowsLimitChecker$2 0% (0/1) 0% (0/1) 0% (0/13)
DataModuleKt$DataModule$1$mobileConfigRepository$2 0% (0/1) 0% (0/18) 0% (0/90)
DataModuleKt$DataModule$1$mobileConfigSettingsManager$2 0% (0/1) 0% (0/1) 0% (0/14)
DataModuleKt$DataModule$1$modalElementValidator$2 0% (0/1) 0% (0/2) 0% (0/6)
DataModuleKt$DataModule$1$modalWindowDtoDataFiller$2 0% (0/1) 0% (0/1) 0% (0/6)
DataModuleKt$DataModule$1$modalWindowValidator$2 0% (0/1) 0% (0/4) 0% (0/12)
DataModuleKt$DataModule$1$monitoringValidator$2 100% (1/1) 100% (1/1) 100% (3/3)
DataModuleKt$DataModule$1$sdkVersionValidator$2 0% (0/1) 0% (0/1) 0% (0/3)
DataModuleKt$DataModule$1$sessionStorageManager$2 0% (0/1) 0% (0/1) 0% (0/7)
DataModuleKt$DataModule$1$slidingExpirationParametersValidator$2 0% (0/1) 0% (0/1) 0% (0/3)
DataModuleKt$DataModule$1$snackBarDtoDataFiller$2 0% (0/1) 0% (0/1) 0% (0/6)
DataModuleKt$DataModule$1$snackbarElementValidator$2 0% (0/1) 0% (0/4) 0% (0/12)
DataModuleKt$DataModule$1$snackbarValidator$2 0% (0/1) 0% (0/3) 0% (0/9)
DataModuleKt$DataModule$1$timeProvider$2 0% (0/1) 0% (0/1) 0% (0/3)
DataModuleKt$DataModule$1$ttlParametersValidator$2 0% (0/1) 0% (0/1) 0% (0/3)
DataModuleKt$DataModule$1$urlValidator$2 0% (0/1) 0% (0/1) 0% (0/3)
DataModuleKt$DataModule$1$xmlValidator$2 0% (0/1) 0% (0/1) 0% (0/3)
Total 7.7% (5/65) 54.2% (143/264) 59.5% (697/1172)


 package cloud.mindbox.mobile_sdk.di.modules
 
 import cloud.mindbox.mobile_sdk.annotations.InternalMindboxApi
 import cloud.mindbox.mobile_sdk.inapp.data.checkers.MaxInappsPerDayLimitChecker
 import cloud.mindbox.mobile_sdk.inapp.data.checkers.MaxInappsPerSessionLimitChecker
 import cloud.mindbox.mobile_sdk.inapp.data.checkers.MinIntervalBetweenShowsLimitChecker
 import cloud.mindbox.mobile_sdk.inapp.data.dto.BackgroundDto
 import cloud.mindbox.mobile_sdk.inapp.data.dto.ElementDto
 import cloud.mindbox.mobile_sdk.inapp.data.dto.PayloadBlankDto
 import cloud.mindbox.mobile_sdk.inapp.data.dto.PayloadDto
 import cloud.mindbox.mobile_sdk.inapp.data.managers.*
 import cloud.mindbox.mobile_sdk.inapp.data.managers.data_filler.*
 import cloud.mindbox.mobile_sdk.inapp.data.mapper.InAppMapper
 import cloud.mindbox.mobile_sdk.inapp.data.repositories.*
 import cloud.mindbox.mobile_sdk.inapp.data.validators.*
 import cloud.mindbox.mobile_sdk.inapp.domain.interfaces.InAppContentFetcher
 import cloud.mindbox.mobile_sdk.inapp.domain.interfaces.InAppImageLoader
 import cloud.mindbox.mobile_sdk.inapp.domain.interfaces.InAppImageSizeStorage
 import cloud.mindbox.mobile_sdk.inapp.domain.interfaces.PermissionManager
 import cloud.mindbox.mobile_sdk.inapp.domain.interfaces.checkers.Checker
 import cloud.mindbox.mobile_sdk.inapp.domain.interfaces.managers.FeatureToggleManager
 import cloud.mindbox.mobile_sdk.inapp.domain.interfaces.managers.GeoSerializationManager
 import cloud.mindbox.mobile_sdk.inapp.domain.interfaces.managers.InAppFailureTracker
 import cloud.mindbox.mobile_sdk.inapp.domain.interfaces.managers.InAppSerializationManager
 import cloud.mindbox.mobile_sdk.inapp.domain.interfaces.managers.MobileConfigSerializationManager
 import cloud.mindbox.mobile_sdk.inapp.domain.interfaces.repositories.*
 import cloud.mindbox.mobile_sdk.inapp.domain.interfaces.validators.InAppValidator
 import cloud.mindbox.mobile_sdk.inapp.presentation.InAppMessageDelayedManager
 import cloud.mindbox.mobile_sdk.inapp.presentation.MindboxNotificationManager
 import cloud.mindbox.mobile_sdk.inapp.presentation.MindboxNotificationManagerImpl
 import cloud.mindbox.mobile_sdk.inapp.presentation.view.BridgeMessage
 import cloud.mindbox.mobile_sdk.managers.*
 import cloud.mindbox.mobile_sdk.managers.MobileConfigSettingsManagerImpl
 import cloud.mindbox.mobile_sdk.managers.RequestPermissionManager
 import cloud.mindbox.mobile_sdk.managers.RequestPermissionManagerImpl
 import cloud.mindbox.mobile_sdk.models.TreeTargetingDto
 import cloud.mindbox.mobile_sdk.models.operation.response.FrequencyDto
 import cloud.mindbox.mobile_sdk.monitoring.data.validators.MonitoringValidator
 import cloud.mindbox.mobile_sdk.utils.*
 import com.google.gson.Gson
 import com.google.gson.GsonBuilder
 import kotlinx.coroutines.Dispatchers
 
 @OptIn(InternalMindboxApi::class)
 internal fun DataModule(
     appContextModule: AppContextModule,
     apiModule: ApiModule
 ): DataModule = object : DataModule,
     AppContextModule by appContextModule,
     ApiModule by apiModule {
 
     override val inAppImageLoader: InAppImageLoader
         get() = InAppGlideImageLoaderImpl(
             appContext,
             inAppImageSizeStorage
         )
 
     override val modalElementDtoDataFiller: ModalElementDtoDataFiller
         get() = ModalElementDtoDataFiller(closeButtonModalElementDtoDataFiller = closeButtonModalElementDtoDataFiller)
 
     override val modalWindowValidator: ModalWindowValidator by lazy {
         ModalWindowValidator(
             imageLayerValidator = imageLayerValidator,
             webViewLayerValidator = webViewLayerValidator,
             elementValidator = modalElementValidator
         )
     }
     override val imageLayerValidator: ImageLayerValidator
         get() = ImageLayerValidator()
     override val webViewLayerValidator: WebViewLayerValidator
         get() = WebViewLayerValidator()
 
     override val modalElementValidator: ModalElementValidator by lazy {
         ModalElementValidator(
             closeButtonElementValidator = closeButtonModalElementValidator
         )
     }
 
     override val snackbarValidator: SnackbarValidator by lazy {
         SnackbarValidator(
             imageLayerValidator,
             snackbarElementValidator
         )
     }
     override val closeButtonModalElementValidator: CloseButtonModalElementValidator
         get() = CloseButtonModalElementValidator(
             sizeValidator = CloseButtonModalSizeValidator(),
             positionValidator = CloseButtonModalPositionValidator()
         )
     override val closeButtonModalPositionValidator: CloseButtonModalPositionValidator
         get() = CloseButtonModalPositionValidator()
     override val closeButtonSnackbarElementValidator: CloseButtonSnackbarElementValidator
         get() = CloseButtonSnackbarElementValidator(
             positionValidator = closeButtonSnackbarPositionValidator,
             sizeValidator = closeButtonSnackbarSizeValidator
         )
     override val closeButtonSnackbarPositionValidator: CloseButtonSnackbarPositionValidator
         get() = CloseButtonSnackbarPositionValidator()
     override val closeButtonSnackbarSizeValidator: CloseButtonSnackbarSizeValidator
         get() = CloseButtonSnackbarSizeValidator()
     override val closeButtonModalElementDtoDataFiller: CloseButtonModalElementDtoDataFiller
         get() = CloseButtonModalElementDtoDataFiller()
     override val closeButtonPositionValidator: CloseButtonModalPositionValidator
         get() = CloseButtonModalPositionValidator()
     override val closeButtonModalSizeValidator: CloseButtonModalSizeValidator
         get() = CloseButtonModalSizeValidator()
 
     override val snackbarElementValidator: SnackBarElementValidator by lazy {
         SnackBarElementValidator(
             closeButtonElementValidator = CloseButtonSnackbarElementValidator(
                 positionValidator = CloseButtonSnackbarPositionValidator(),
                 sizeValidator = CloseButtonSnackbarSizeValidator()
             )
         )
     }
     override val snackBarElementDtoDataFiller: SnackbarElementDtoDataFiller
         get() = SnackbarElementDtoDataFiller(closeButtonSnackbarElementDtoDataFiller = closeButtonSnackbarElementDtoDataFiller)
     override val closeButtonSnackbarElementDtoDataFiller: CloseButtonSnackbarElementDtoDataFiller
         get() = CloseButtonSnackbarElementDtoDataFiller()
 
     override val modalWindowDtoDataFiller: ModalWindowDtoDataFiller
         by lazy { ModalWindowDtoDataFiller(elementDtoDataFiller = modalElementDtoDataFiller) }
 
     override val snackBarDtoDataFiller: SnackBarDtoDataFiller
         by lazy { SnackBarDtoDataFiller(elementDtoDataFiller = snackBarElementDtoDataFiller) }
 
     override val defaultDataManager: DataManager by lazy {
         DataManager(
             modalWindowDtoDataFiller = modalWindowDtoDataFiller,
             snackBarDtoDataFiller = snackBarDtoDataFiller,
             frequencyDataFiller = frequencyDataFiller
         )
     }
 
     override val inAppImageSizeStorage: InAppImageSizeStorage by lazy { InAppImageSizeStorageImpl() }
 
     override val sessionStorageManager: SessionStorageManager by lazy { SessionStorageManager(timeProvider) }
 
     override val permissionManager: PermissionManager
         get() = PermissionManagerImpl(appContext)
 
     override val inAppContentFetcher: InAppContentFetcher by lazy {
         InAppContentFetcherImpl(
             inAppImageLoader
         )
     }
 
     override val mobileConfigRepository: MobileConfigRepository by lazy {
         MobileConfigRepositoryImpl(
             inAppMapper = inAppMapper,
             mobileConfigSerializationManager = mobileConfigSerializationManager,
             inAppValidator = inAppValidator,
             abTestValidator = abTestValidator,
             monitoringValidator = monitoringValidator,
             operationNameValidator = operationNameValidator,
             operationValidator = operationValidator,
             gatewayManager = gatewayManager,
             defaultDataManager = defaultDataManager,
             ttlParametersValidator = ttlParametersValidator,
             inAppConfigTtlValidator = inAppConfigTtlValidator,
             sessionStorageManager = sessionStorageManager,
             timeSpanPositiveValidator = slidingExpirationParametersValidator,
             mobileConfigSettingsManager = mobileConfigSettingsManager,
             integerPositiveValidator = integerPositiveValidator,
             inappSettingsManager = inappSettingsManager,
             featureToggleManager = featureToggleManager
         )
     }
 
     override val mobileConfigSerializationManager: MobileConfigSerializationManager
         get() = MobileConfigSerializationManagerImpl(
             gson = gson.newBuilder()
                 .registerTypeAdapter(String::class.java, StrictStringAdapter())
                 .create()
         )
 
     override val inAppGeoRepository: InAppGeoRepository by lazy {
         InAppGeoRepositoryImpl(
             context = appContext,
             inAppMapper = inAppMapper,
             geoSerializationManager = geoSerializationManager,
             sessionStorageManager = sessionStorageManager,
             gatewayManager = gatewayManager,
         )
     }
 
     override val inAppRepository: InAppRepository by lazy {
         InAppRepositoryImpl(
             context = appContext,
             sessionStorageManager = sessionStorageManager,
             inAppSerializationManager = inAppSerializationManager,
             timeProvider = timeProvider
         )
     }
     override val callbackRepository: CallbackRepository by lazy {
         CallbackRepositoryImpl(
             xmlValidator = xmlValidator,
             jsonValidator = jsonValidator,
             urlValidator = urlValidator
         )
     }
 
     override val geoSerializationManager: GeoSerializationManager
         get() = GeoSerializationManagerImpl(gson = gson)
 
     override val inAppSerializationManager: InAppSerializationManager
         get() = InAppSerializationManagerImpl(gson = gson)
 
     override val inAppFailureTracker: InAppFailureTracker by lazy {
         InAppFailureTrackerImpl(
             timeProvider = timeProvider,
             inAppRepository = inAppRepository,
             featureToggleManager = featureToggleManager
         )
     }
 
     override val inAppSegmentationRepository: InAppSegmentationRepository by lazy {
         InAppSegmentationRepositoryImpl(
             inAppMapper = inAppMapper,
             sessionStorageManager = sessionStorageManager,
             gatewayManager = gatewayManager,
         )
     }
     override val inAppTargetingErrorRepository: InAppTargetingErrorRepository by lazy {
         InAppTargetingErrorRepositoryImpl(
             sessionStorageManager = sessionStorageManager
         )
     }
 
     override val monitoringValidator: MonitoringValidator by lazy { MonitoringValidator() }
 
     override val inAppValidator: InAppValidator by lazy {
         InAppValidatorImpl(
             sdkVersionValidator = sdkVersionValidator,
             modalWindowValidator = modalWindowValidator,
             snackbarValidator = snackbarValidator,
             frequencyValidator = frequencyValidator
         )
     }
 
     override val abTestValidator: ABTestValidator by lazy { ABTestValidator(sdkVersionValidator) }
 
     override val sdkVersionValidator: SdkVersionValidator by lazy { SdkVersionValidator() }
     override val jsonValidator: JsonValidator by lazy { JsonValidator() }
     override val xmlValidator: XmlValidator by lazy { XmlValidator() }
     override val urlValidator: UrlValidator by lazy { UrlValidator() }
 
     override val operationNameValidator: OperationNameValidator
         get() = OperationNameValidator()
 
     override val operationValidator: OperationValidator
         get() = OperationValidator()
 
     override val ttlParametersValidator: TtlParametersValidator by lazy { TtlParametersValidator() }
 
     override val inAppConfigTtlValidator: InAppConfigTtlValidator by lazy { InAppConfigTtlValidator() }
 
     override val slidingExpirationParametersValidator: TimeSpanPositiveValidator by lazy { TimeSpanPositiveValidator() }
     override val mobileConfigSettingsManager: MobileConfigSettingsManagerImpl by lazy {
         MobileConfigSettingsManagerImpl(appContext, sessionStorageManager, timeProvider)
     }
     override val integerPositiveValidator: IntegerPositiveValidator by lazy { IntegerPositiveValidator() }
     override val inappSettingsManager: InappSettingsManagerImpl by lazy { InappSettingsManagerImpl(sessionStorageManager) }
     override val featureToggleManager: FeatureToggleManager by lazy { FeatureToggleManagerImpl() }
     override val maxInappsPerSessionLimitChecker: Checker by lazy { MaxInappsPerSessionLimitChecker(sessionStorageManager) }
     override val maxInappsPerDayLimitChecker: Checker by lazy { MaxInappsPerDayLimitChecker(inAppRepository, sessionStorageManager, timeProvider) }
     override val minIntervalBetweenShowsLimitChecker: Checker by lazy { MinIntervalBetweenShowsLimitChecker(sessionStorageManager, inAppRepository, timeProvider) }
     override val inAppMessageDelayedManager: InAppMessageDelayedManager by lazy {
         InAppMessageDelayedManager(timeProvider = timeProvider, dispatcher = Dispatchers.Default)
     }
 
     override val inAppMapper: InAppMapper by lazy { InAppMapper() }
 
     override val mindboxNotificationManager: MindboxNotificationManager by lazy {
         MindboxNotificationManagerImpl(
             context = appContext,
             requestPermissionManager = requestPermissionManager
         )
     }
 
     override val requestPermissionManager: RequestPermissionManager
         get() = RequestPermissionManagerImpl()
     override val frequencyDataFiller: FrequencyDataFiller
         get() = FrequencyDataFiller()
     override val frequencyValidator: FrequencyValidator
         get() = FrequencyValidator()
     override val migrationManager: MigrationManager by lazy {
         MigrationManager(appContext)
     }
     override val timeProvider: SystemTimeProvider by lazy {
         SystemTimeProvider()
     }
 
     override val gson: Gson by lazy {
         GsonBuilder()
             .registerTypeAdapterFactory(
                 RuntimeTypeAdapterFactory
                     .of(
                         BridgeMessage::class.java,
                         BridgeMessage.TYPE_FIELD_NAME,
                         true
                     ).registerSubtype(
                         BridgeMessage.Request::class.java,
                         BridgeMessage.TYPE_REQUEST
                     ).registerSubtype(
                         BridgeMessage.Response::class.java,
                         BridgeMessage.TYPE_RESPONSE
                     ).registerSubtype(
                         BridgeMessage.Error::class.java,
                         BridgeMessage.TYPE_ERROR
                     )
             )
             .registerTypeAdapterFactory(
                 RuntimeTypeAdapterFactory
                     .of(
                         FrequencyDto::class.java,
                         Constants.TYPE_JSON_NAME,
                         true
                     ).registerSubtype(
                         FrequencyDto.FrequencyOnceDto::class.java,
                         FrequencyDto.FrequencyOnceDto.FREQUENCY_ONCE_JSON_NAME
                     ).registerSubtype(
                         FrequencyDto.FrequencyPeriodicDto::class.java,
                         FrequencyDto.FrequencyPeriodicDto.FREQUENCY_PERIODIC_JSON_NAME
                     )
             ).registerTypeAdapterFactory(
                 RuntimeTypeAdapterFactory
                     .of(
                         PayloadBlankDto::class.java,
                         Constants.TYPE_JSON_NAME,
                         true
                     ).registerSubtype(
                         PayloadBlankDto.ModalWindowBlankDto::class.java,
                         PayloadDto.ModalWindowDto.MODAL_JSON_NAME
                     ).registerSubtype(
                         PayloadBlankDto.SnackBarBlankDto::class.java,
                         PayloadDto.SnackbarDto.SNACKBAR_JSON_NAME
                     )
             ).registerTypeAdapterFactory(
                 RuntimeTypeAdapterFactory
                     .of(
                         ElementDto::class.java,
                         Constants.TYPE_JSON_NAME, true
                     ).registerSubtype(
                         ElementDto.CloseButtonElementDto::class.java,
                         ElementDto.CloseButtonElementDto.CLOSE_BUTTON_ELEMENT_JSON_NAME
                     )
             ).registerTypeAdapterFactory(
                 RuntimeTypeAdapterFactory
                     .of(
                         BackgroundDto.LayerDto.ImageLayerDto.SourceDto::class.java,
                         Constants.TYPE_JSON_NAME,
                         true
                     ).registerSubtype(
                         BackgroundDto.LayerDto.ImageLayerDto.SourceDto.UrlSourceDto::class.java,
                         BackgroundDto.LayerDto.ImageLayerDto.SourceDto.UrlSourceDto.URL_SOURCE_JSON_NAME
                     )
             ).registerTypeAdapterFactory(
                 RuntimeTypeAdapterFactory
                     .of(
                         BackgroundDto.LayerDto.ImageLayerDto.ActionDto::class.java,
                         Constants.TYPE_JSON_NAME,
                         true
                     ).registerSubtype(
                         RedirectUrlActionDto::class.java,
                         RedirectUrlActionDto.REDIRECT_URL_ACTION_TYPE_JSON_NAME
                     ).registerSubtype(
                         PushPermissionActionDto::class.java,
                         PushPermissionActionDto.PUSH_PERMISSION_TYPE_JSON_NAME
                     )
             ).registerTypeAdapterFactory(
                 RuntimeTypeAdapterFactory
                     .of(
                         BackgroundDto.LayerDto::class.java,
                         Constants.TYPE_JSON_NAME,
                         true
                     ).registerSubtype(
                         BackgroundDto.LayerDto.ImageLayerDto::class.java,
                         BackgroundDto.LayerDto.ImageLayerDto.IMAGE_TYPE_JSON_NAME
                     ).registerSubtype(
                         BackgroundDto.LayerDto.WebViewLayerDto::class.java,
                         BackgroundDto.LayerDto.WebViewLayerDto.WEBVIEW_TYPE_JSON_NAME
                     )
             ).registerTypeAdapterFactory(
                 RuntimeTypeAdapterFactory
                     .of(
                         PayloadDto::class.java,
                         Constants.TYPE_JSON_NAME, true
                     ).registerSubtype(
                         PayloadDto.ModalWindowDto::class.java,
                         PayloadDto.ModalWindowDto.MODAL_JSON_NAME
                     ).registerSubtype(
                         PayloadDto.SnackbarDto::class.java,
                         PayloadDto.SnackbarDto.SNACKBAR_JSON_NAME
                     )
             ).registerTypeAdapterFactory(
                 RuntimeTypeAdapterFactory
                     .of(
                         TreeTargetingDto::class.java,
                         Constants.TYPE_JSON_NAME,
                         true
                     ).registerSubtype(
                         TreeTargetingDto.TrueNodeDto::class.java,
                         TreeTargetingDto.TrueNodeDto.TRUE_JSON_NAME
                     ).registerSubtype(
                         TreeTargetingDto.IntersectionNodeDto::class.java,
                         TreeTargetingDto.IntersectionNodeDto.AND_JSON_NAME
                     ).registerSubtype(
                         TreeTargetingDto.UnionNodeDto::class.java,
                         TreeTargetingDto.UnionNodeDto.OR_JSON_NAME
                     ).registerSubtype(
                         TreeTargetingDto.SegmentNodeDto::class.java,
                         TreeTargetingDto.SegmentNodeDto.SEGMENT_JSON_NAME
                     ).registerSubtype(
                         TreeTargetingDto.CountryNodeDto::class.java,
                         TreeTargetingDto.CountryNodeDto.COUNTRY_JSON_NAME
                     ).registerSubtype(
                         TreeTargetingDto.CityNodeDto::class.java,
                         TreeTargetingDto.CityNodeDto.CITY_JSON_NAME
                     ).registerSubtype(
                         TreeTargetingDto.RegionNodeDto::class.java,
                         TreeTargetingDto.RegionNodeDto.REGION_JSON_NAME
                     ).registerSubtype(
                         TreeTargetingDto.OperationNodeDto::class.java,
                         TreeTargetingDto.OperationNodeDto.API_METHOD_CALL_JSON_NAME
                     ).registerSubtype(
                         TreeTargetingDto.ViewProductCategoryNodeDto::class.java,
                         TreeTargetingDto.ViewProductCategoryNodeDto.VIEW_PRODUCT_CATEGORY_ID_JSON_NAME
                     ).registerSubtype(
                         TreeTargetingDto.ViewProductCategoryInNodeDto::class.java,
                         TreeTargetingDto.ViewProductCategoryInNodeDto.VIEW_PRODUCT_CATEGORY_ID_IN_JSON_NAME
                     ).registerSubtype(
                         TreeTargetingDto.ViewProductSegmentNodeDto::class.java,
                         TreeTargetingDto.ViewProductSegmentNodeDto.VIEW_PRODUCT_SEGMENT_JSON_NAME
                     ).registerSubtype(
                         TreeTargetingDto.ViewProductNodeDto::class.java,
                         TreeTargetingDto.ViewProductNodeDto.VIEW_PRODUCT_ID_JSON_NAME
                     ).registerSubtype(
                         TreeTargetingDto.VisitNodeDto::class.java,
                         TreeTargetingDto.VisitNodeDto.VISIT_JSON_NAME
                     ).registerSubtype(
                         TreeTargetingDto.PushPermissionDto::class.java,
                         TreeTargetingDto.PushPermissionDto.PUSH_PERMISSION_JSON_NAME
                     )
             )
             .create()
     }
 }