Skip to content

Commit f7508a2

Browse files
authored
Changed type parameter T in NavStateSaver to nullable (#1009)
<!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * `NavStateSaver` now supports nullable configuration values. * Convenience builders were updated to work with both nullable and non-nullable types, while keeping serialization behavior the same. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
2 parents e1d343b + 75aff7a commit f7508a2

2 files changed

Lines changed: 16 additions & 12 deletions

File tree

decompose/api/decompose.klib.api

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -69,11 +69,6 @@ abstract interface <#A: kotlin/Any, #B: kotlin/Any, #C: kotlin/Any> com.arkivano
6969
abstract fun navigate(kotlin/Function1<com.arkivanov.decompose.router.panels/Panels<#A, #B, #C>, com.arkivanov.decompose.router.panels/Panels<#A, #B, #C>>, kotlin/Function2<com.arkivanov.decompose.router.panels/Panels<#A, #B, #C>, com.arkivanov.decompose.router.panels/Panels<#A, #B, #C>, kotlin/Unit>) // com.arkivanov.decompose.router.panels/PanelsNavigator.navigate|navigate(kotlin.Function1<com.arkivanov.decompose.router.panels.Panels<1:0,1:1,1:2>,com.arkivanov.decompose.router.panels.Panels<1:0,1:1,1:2>>;kotlin.Function2<com.arkivanov.decompose.router.panels.Panels<1:0,1:1,1:2>,com.arkivanov.decompose.router.panels.Panels<1:0,1:1,1:2>,kotlin.Unit>){}[0]
7070
}
7171

72-
abstract interface <#A: kotlin/Any> com.arkivanov.decompose.router.children/NavStateSaver { // com.arkivanov.decompose.router.children/NavStateSaver|null[0]
73-
abstract fun restoreState(com.arkivanov.essenty.statekeeper/SerializableContainer): #A? // com.arkivanov.decompose.router.children/NavStateSaver.restoreState|restoreState(com.arkivanov.essenty.statekeeper.SerializableContainer){}[0]
74-
abstract fun saveState(#A): com.arkivanov.essenty.statekeeper/SerializableContainer? // com.arkivanov.decompose.router.children/NavStateSaver.saveState|saveState(1:0){}[0]
75-
}
76-
7772
abstract interface <#A: kotlin/Any> com.arkivanov.decompose.router.items/ItemsNavigation : com.arkivanov.decompose.router.children/NavigationSource<com.arkivanov.decompose.router.items/ItemsNavigation.Event<#A>>, com.arkivanov.decompose.router.items/ItemsNavigator<#A> { // com.arkivanov.decompose.router.items/ItemsNavigation|null[0]
7873
final class <#A1: kotlin/Any> Event { // com.arkivanov.decompose.router.items/ItemsNavigation.Event|null[0]
7974
constructor <init>(kotlin/Function1<com.arkivanov.decompose.router.items/Items<#A1>, com.arkivanov.decompose.router.items/Items<#A1>>, kotlin/Function2<com.arkivanov.decompose.router.items/Items<#A1>, com.arkivanov.decompose.router.items/Items<#A1>, kotlin/Unit> = ...) // com.arkivanov.decompose.router.items/ItemsNavigation.Event.<init>|<init>(kotlin.Function1<com.arkivanov.decompose.router.items.Items<1:0>,com.arkivanov.decompose.router.items.Items<1:0>>;kotlin.Function2<com.arkivanov.decompose.router.items.Items<1:0>,com.arkivanov.decompose.router.items.Items<1:0>,kotlin.Unit>){}[0]
@@ -157,6 +152,11 @@ abstract interface <#A: kotlin/Any> com.arkivanov.decompose.router.webhistory/We
157152
}
158153
}
159154

155+
abstract interface <#A: kotlin/Any?> com.arkivanov.decompose.router.children/NavStateSaver { // com.arkivanov.decompose.router.children/NavStateSaver|null[0]
156+
abstract fun restoreState(com.arkivanov.essenty.statekeeper/SerializableContainer): #A? // com.arkivanov.decompose.router.children/NavStateSaver.restoreState|restoreState(com.arkivanov.essenty.statekeeper.SerializableContainer){}[0]
157+
abstract fun saveState(#A): com.arkivanov.essenty.statekeeper/SerializableContainer? // com.arkivanov.decompose.router.children/NavStateSaver.saveState|saveState(1:0){}[0]
158+
}
159+
160160
abstract interface <#A: out kotlin/Any> com.arkivanov.decompose.router.children/ChildNavState { // com.arkivanov.decompose.router.children/ChildNavState|null[0]
161161
abstract val configuration // com.arkivanov.decompose.router.children/ChildNavState.configuration|{}configuration[0]
162162
abstract fun <get-configuration>(): #A // com.arkivanov.decompose.router.children/ChildNavState.configuration.<get-configuration>|<get-configuration>(){}[0]
@@ -651,13 +651,13 @@ final fun <#A: kotlin/Any> (com.arkivanov.decompose.value/MutableValue<#A>).com.
651651
final fun <#A: kotlin/Any> (com.arkivanov.decompose.value/MutableValue<#A>).com.arkivanov.decompose.value/updateAndGet(kotlin/Function1<#A, #A>): #A // com.arkivanov.decompose.value/updateAndGet|updateAndGet@com.arkivanov.decompose.value.MutableValue<0:0>(kotlin.Function1<0:0,0:0>){0§<kotlin.Any>}[0]
652652
final fun <#A: kotlin/Any> (com.arkivanov.decompose.value/Value<#A>).com.arkivanov.decompose.value/getValue(kotlin/Any?, kotlin.reflect/KProperty<*>): #A // com.arkivanov.decompose.value/getValue|getValue@com.arkivanov.decompose.value.Value<0:0>(kotlin.Any?;kotlin.reflect.KProperty<*>){0§<kotlin.Any>}[0]
653653
final fun <#A: kotlin/Any> (com.arkivanov.decompose.value/Value<#A>).com.arkivanov.decompose.value/subscribe(com.arkivanov.essenty.lifecycle/Lifecycle, com.arkivanov.decompose.value/ObserveLifecycleMode = ..., kotlin/Function1<#A, kotlin/Unit>) // com.arkivanov.decompose.value/subscribe|subscribe@com.arkivanov.decompose.value.Value<0:0>(com.arkivanov.essenty.lifecycle.Lifecycle;com.arkivanov.decompose.value.ObserveLifecycleMode;kotlin.Function1<0:0,kotlin.Unit>){0§<kotlin.Any>}[0]
654-
final fun <#A: kotlin/Any> com.arkivanov.decompose.router.children/NavStateSaver(kotlinx.serialization/KSerializer<#A>): com.arkivanov.decompose.router.children/NavStateSaver<#A> // com.arkivanov.decompose.router.children/NavStateSaver|NavStateSaver(kotlinx.serialization.KSerializer<0:0>){0§<kotlin.Any>}[0]
655654
final fun <#A: kotlin/Any> com.arkivanov.decompose.router.children/transientNavStateSaver(): com.arkivanov.decompose.router.children/NavStateSaver<#A> // com.arkivanov.decompose.router.children/transientNavStateSaver|transientNavStateSaver(){0§<kotlin.Any>}[0]
656655
final fun <#A: kotlin/Any> com.arkivanov.decompose.router.items/ItemsNavigation(): com.arkivanov.decompose.router.items/ItemsNavigation<#A> // com.arkivanov.decompose.router.items/ItemsNavigation|ItemsNavigation(){0§<kotlin.Any>}[0]
657656
final fun <#A: kotlin/Any> com.arkivanov.decompose.router.pages/PagesNavigation(): com.arkivanov.decompose.router.pages/PagesNavigation<#A> // com.arkivanov.decompose.router.pages/PagesNavigation|PagesNavigation(){0§<kotlin.Any>}[0]
658657
final fun <#A: kotlin/Any> com.arkivanov.decompose.router.slot/SlotNavigation(): com.arkivanov.decompose.router.slot/SlotNavigation<#A> // com.arkivanov.decompose.router.slot/SlotNavigation|SlotNavigation(){0§<kotlin.Any>}[0]
659658
final fun <#A: kotlin/Any> com.arkivanov.decompose.router.stack/StackNavigation(): com.arkivanov.decompose.router.stack/StackNavigation<#A> // com.arkivanov.decompose.router.stack/StackNavigation|StackNavigation(){0§<kotlin.Any>}[0]
660659
final fun <#A: kotlin/Any> com.arkivanov.decompose.value/MutableValue(#A): com.arkivanov.decompose.value/MutableValue<#A> // com.arkivanov.decompose.value/MutableValue|MutableValue(0:0){0§<kotlin.Any>}[0]
660+
final fun <#A: kotlin/Any?> com.arkivanov.decompose.router.children/NavStateSaver(kotlinx.serialization/KSerializer<#A!!>): com.arkivanov.decompose.router.children/NavStateSaver<#A> // com.arkivanov.decompose.router.children/NavStateSaver|NavStateSaver(kotlinx.serialization.KSerializer<0:0>){0§<kotlin.Any?>}[0]
661661
final fun com.arkivanov.decompose.router.pages/getDefaultPageStatus(kotlin/Int, com.arkivanov.decompose.router.pages/Pages<*>): com.arkivanov.decompose.router.children/ChildNavState.Status // com.arkivanov.decompose.router.pages/getDefaultPageStatus|getDefaultPageStatus(kotlin.Int;com.arkivanov.decompose.router.pages.Pages<*>){}[0]
662662
final inline fun (com.arkivanov.decompose.router.slot/SlotNavigator<*>).com.arkivanov.decompose.router.slot/dismiss(crossinline kotlin/Function1<kotlin/Boolean, kotlin/Unit> = ...) // com.arkivanov.decompose.router.slot/dismiss|dismiss@com.arkivanov.decompose.router.slot.SlotNavigator<*>(kotlin.Function1<kotlin.Boolean,kotlin.Unit>){}[0]
663663
final inline fun (com.arkivanov.decompose.router.stack/StackNavigator<*>).com.arkivanov.decompose.router.stack/popToFirst(crossinline kotlin/Function1<kotlin/Boolean, kotlin/Unit> = ...) // com.arkivanov.decompose.router.stack/popToFirst|popToFirst@com.arkivanov.decompose.router.stack.StackNavigator<*>(kotlin.Function1<kotlin.Boolean,kotlin.Unit>){}[0]
@@ -678,7 +678,7 @@ final inline fun <#A: kotlin/Any> (com.arkivanov.decompose.router.stack/StackNav
678678
final inline fun <#A: kotlin/Any> (com.arkivanov.decompose.router.stack/StackNavigator<#A>).com.arkivanov.decompose.router.stack/pushToFront(#A, crossinline kotlin/Function0<kotlin/Unit> = ...) // com.arkivanov.decompose.router.stack/pushToFront|pushToFront@com.arkivanov.decompose.router.stack.StackNavigator<0:0>(0:0;kotlin.Function0<kotlin.Unit>){0§<kotlin.Any>}[0]
679679
final inline fun <#A: kotlin/Any> (com.arkivanov.decompose.router.stack/StackNavigator<#A>).com.arkivanov.decompose.router.stack/replaceAll(kotlin/Array<out #A>..., crossinline kotlin/Function0<kotlin/Unit> = ...) // com.arkivanov.decompose.router.stack/replaceAll|replaceAll@com.arkivanov.decompose.router.stack.StackNavigator<0:0>(kotlin.Array<out|0:0>...;kotlin.Function0<kotlin.Unit>){0§<kotlin.Any>}[0]
680680
final inline fun <#A: kotlin/Any> (com.arkivanov.decompose.router.stack/StackNavigator<#A>).com.arkivanov.decompose.router.stack/replaceCurrent(#A, crossinline kotlin/Function0<kotlin/Unit> = ...) // com.arkivanov.decompose.router.stack/replaceCurrent|replaceCurrent@com.arkivanov.decompose.router.stack.StackNavigator<0:0>(0:0;kotlin.Function0<kotlin.Unit>){0§<kotlin.Any>}[0]
681-
final inline fun <#A: kotlin/Any> com.arkivanov.decompose.router.children/NavStateSaver(crossinline kotlin/Function1<#A, com.arkivanov.essenty.statekeeper/SerializableContainer?>, crossinline kotlin/Function1<com.arkivanov.essenty.statekeeper/SerializableContainer, #A?>): com.arkivanov.decompose.router.children/NavStateSaver<#A> // com.arkivanov.decompose.router.children/NavStateSaver|NavStateSaver(kotlin.Function1<0:0,com.arkivanov.essenty.statekeeper.SerializableContainer?>;kotlin.Function1<com.arkivanov.essenty.statekeeper.SerializableContainer,0:0?>){0§<kotlin.Any>}[0]
681+
final inline fun <#A: kotlin/Any?> com.arkivanov.decompose.router.children/NavStateSaver(crossinline kotlin/Function1<#A, com.arkivanov.essenty.statekeeper/SerializableContainer?>, crossinline kotlin/Function1<com.arkivanov.essenty.statekeeper/SerializableContainer, #A?>): com.arkivanov.decompose.router.children/NavStateSaver<#A> // com.arkivanov.decompose.router.children/NavStateSaver|NavStateSaver(kotlin.Function1<0:0,com.arkivanov.essenty.statekeeper.SerializableContainer?>;kotlin.Function1<com.arkivanov.essenty.statekeeper.SerializableContainer,0:0?>){0§<kotlin.Any?>}[0]
682682

683683
// Targets: [js, wasmJs]
684684
final class com.arkivanov.decompose.router.stack.webhistory/DefaultWebHistoryController : com.arkivanov.decompose.router.stack.webhistory/WebHistoryController { // com.arkivanov.decompose.router.stack.webhistory/DefaultWebHistoryController|null[0]

decompose/src/commonMain/kotlin/com/arkivanov/decompose/router/children/NavStateSaver.kt

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import kotlinx.serialization.KSerializer
99
* A contract for saving and restoring navigation states.
1010
*/
1111
@ExperimentalDecomposeApi
12-
interface NavStateSaver<T : Any> {
12+
interface NavStateSaver<T> {
1313

1414
/**
1515
* Saves the provided navigation state into [SerializableContainer].
@@ -33,7 +33,7 @@ interface NavStateSaver<T : Any> {
3333
* with the provided [save] and [restore] functions.
3434
*/
3535
@ExperimentalDecomposeApi
36-
inline fun <T : Any> NavStateSaver(
36+
inline fun <T> NavStateSaver(
3737
crossinline save: (T) -> SerializableContainer?,
3838
crossinline restore: (SerializableContainer) -> T?,
3939
): NavStateSaver<T> =
@@ -47,8 +47,12 @@ inline fun <T : Any> NavStateSaver(
4747
* that saves and restores the navigation state using the provided [serializer].
4848
*/
4949
@ExperimentalDecomposeApi
50-
fun <T : Any> NavStateSaver(serializer: KSerializer<T>): NavStateSaver<T> =
50+
fun <T> NavStateSaver(serializer: KSerializer<T & Any>): NavStateSaver<T> =
5151
NavStateSaver(
52-
save = { SerializableContainer(value = it, strategy = serializer) },
53-
restore = { it.consume(strategy = serializer) },
52+
save = {
53+
SerializableContainer(value = it, strategy = serializer)
54+
},
55+
restore = {
56+
it.consume(strategy = serializer)
57+
},
5458
)

0 commit comments

Comments
 (0)