# Saver

Artifact: [androidx.compose.runtime:runtime-saveable](https://developer.android.com/jetpack/androidx/releases/compose-runtime) [View Source](https://cs.android.com/search?q=file:androidx/compose/runtime/saveable/Saver.kt+class:androidx.compose.runtime.saveable.Saver) Added in [1.0.0](https://developer.android.com/jetpack/androidx/releases/compose-runtime#1.0.0) Common/All
- Cmn

  ```
  interface Saver<Original : Any?, Saveable : Any>
  ```
Known direct subclasses [TextFieldState.Saver](https://developer.android.com/reference/kotlin/androidx/compose/foundation/text/input/TextFieldState.Saver)

|---|---|
| `https://developer.android.com/reference/kotlin/androidx/compose/foundation/text/input/TextFieldState.Saver` | Saves and restores a `https://developer.android.com/reference/kotlin/androidx/compose/foundation/text/input/TextFieldState` for `https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/rememberSaveable.composable#rememberSaveable(kotlin.Array,androidx.compose.runtime.saveable.Saver,kotlin.String,kotlin.Function0)`. |

*** ** * ** ***

The `https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/Saver` describes how the object of `https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/Saver` class can be simplified and converted into something which is `https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/Saver`.

What types can be saved is defined by `https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/SaveableStateRegistry`, by default everything which can be stored in the Bundle class can be saved. The implementations can check that the provided value can be saved via `https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/SaverScope#canBeSaved(kotlin.Any)`

You can pass the implementations of this class as a parameter for `https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/rememberSaveable.composable#rememberSaveable(kotlin.Array,androidx.compose.runtime.saveable.Saver,kotlin.String,kotlin.Function0)`.

```kotlin
import androidx.compose.runtime.saveable.Saver

data class Holder(var value: Int)

// this Saver implementation converts Holder object which we don't know how to save
// to Int which we can save
val HolderSaver = Saver<Holder, Int>(save = { it.value }, restore = { Holder(it) })
```

## Summary

| ### Public functions |
|---|---|---|
| `Original?` | `https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/Saver#restore(kotlin.Any)(value: Saveable)` Convert the restored value back to the original Class. | Cmn |
| `Saveable?` | `https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/SaverScope.https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/Saver#(androidx.compose.runtime.saveable.SaverScope).save(kotlin.Any)(value: Original)` Convert the value into a saveable one. | Cmn |

## Public functions

### restore

Cmn Added in [1.0.0](https://developer.android.com/jetpack/androidx/releases/compose-runtime#1.0.0)

```
fun restore(value: Saveable): Original?
```

Convert the restored value back to the original Class. If null is returned the value will not be restored and would be initialized again instead.

### SaverScope.save

Cmn Artifact: [androidx.compose.runtime:runtime-saveable](https://developer.android.com/jetpack/androidx/releases/compose-runtime) [View Source](https://cs.android.com/search?q=file:androidx/compose/runtime/saveable/Saver.kt+function:save) Added in [1.0.0](https://developer.android.com/jetpack/androidx/releases/compose-runtime#1.0.0)

```
fun SaverScope.save(value: Original): Saveable?
```

Convert the value into a saveable one. If null is returned the value will not be saved.