// Signature format: 4.0
package androidx.datastore {

  public final class CorruptionException extends java.io.IOException {
    ctor public CorruptionException(String message, Throwable? cause);
  }

  public interface CorruptionHandler<T> {
    method public suspend Object? handleCorruption(androidx.datastore.CorruptionException ex, kotlin.coroutines.Continuation<? super T> p);
  }

  public interface DataMigration<T> {
    method public suspend Object? cleanUp(kotlin.coroutines.Continuation<? super kotlin.Unit> p);
    method public suspend Object? migrate(T? currentData, kotlin.coroutines.Continuation<? super T> p);
    method public suspend Object? shouldMigrate(T? currentData, kotlin.coroutines.Continuation<? super java.lang.Boolean> p);
  }

  public interface DataStore<T> {
    method public kotlinx.coroutines.flow.Flow<T> getData();
    method public suspend Object? updateData(kotlin.jvm.functions.Function2<? super T,? super kotlin.coroutines.Continuation<? super T>,?> transform, kotlin.coroutines.Continuation<? super T> p);
    property public abstract kotlinx.coroutines.flow.Flow<T> data;
  }

  public final class DataStoreFactory {
    method public <T> androidx.datastore.DataStore<T> create(kotlin.jvm.functions.Function0<? extends java.io.File> produceFile, androidx.datastore.Serializer<T> serializer, optional androidx.datastore.handlers.ReplaceFileCorruptionHandler<T>? corruptionHandler, optional java.util.List<? extends androidx.datastore.DataMigration<T>> migrations, optional kotlinx.coroutines.CoroutineScope scope);
    method public <T> androidx.datastore.DataStore<T> create(kotlin.jvm.functions.Function0<? extends java.io.File> produceFile, androidx.datastore.Serializer<T> serializer, optional androidx.datastore.handlers.ReplaceFileCorruptionHandler<T>? corruptionHandler, optional java.util.List<? extends androidx.datastore.DataMigration<T>> migrations);
    method public <T> androidx.datastore.DataStore<T> create(kotlin.jvm.functions.Function0<? extends java.io.File> produceFile, androidx.datastore.Serializer<T> serializer, optional androidx.datastore.handlers.ReplaceFileCorruptionHandler<T>? corruptionHandler);
    method public <T> androidx.datastore.DataStore<T> create(kotlin.jvm.functions.Function0<? extends java.io.File> produceFile, androidx.datastore.Serializer<T> serializer);
    field public static final androidx.datastore.DataStoreFactory INSTANCE;
  }

  public final class DataStoreFactoryKt {
    method public static <T> androidx.datastore.DataStore<T> createDataStore(android.content.Context, String fileName, androidx.datastore.Serializer<T> serializer, optional androidx.datastore.handlers.ReplaceFileCorruptionHandler<T>? corruptionHandler, optional java.util.List<? extends androidx.datastore.DataMigration<T>> migrations, optional kotlinx.coroutines.CoroutineScope scope);
  }

  public interface Serializer<T> {
    method public T! readFrom(java.io.InputStream input);
    method public void writeTo(T? t, java.io.OutputStream output);
  }

}

package androidx.datastore.handlers {

  public final class ReplaceFileCorruptionHandler<T> implements androidx.datastore.CorruptionHandler<T> {
    ctor public ReplaceFileCorruptionHandler(kotlin.jvm.functions.Function1<? super androidx.datastore.CorruptionException,? extends T> produceNewData);
    method @kotlin.jvm.Throws(exceptionClasses=IOException::class) public suspend Object? handleCorruption(androidx.datastore.CorruptionException ex, kotlin.coroutines.Continuation<? super T> p) throws java.io.IOException;
  }

}

package androidx.datastore.migrations {

  public final class SharedPreferencesMigration<T> implements androidx.datastore.DataMigration<T> {
    ctor public SharedPreferencesMigration(android.content.Context context, String sharedPreferencesName, java.util.Set<java.lang.String>? keysToMigrate, boolean deleteEmptyPreferences, kotlin.jvm.functions.Function2<? super T,? super kotlin.coroutines.Continuation<? super java.lang.Boolean>,?> shouldRunMigration, kotlin.jvm.functions.Function3<? super androidx.datastore.migrations.SharedPreferencesView,? super T,? super kotlin.coroutines.Continuation<? super T>,?> migrate);
    ctor public SharedPreferencesMigration(android.content.Context context, String sharedPreferencesName, java.util.Set<java.lang.String>? keysToMigrate, boolean deleteEmptyPreferences, kotlin.jvm.functions.Function3<? super androidx.datastore.migrations.SharedPreferencesView,? super T,? super kotlin.coroutines.Continuation<? super T>,?> migrate);
    ctor public SharedPreferencesMigration(android.content.Context context, String sharedPreferencesName, java.util.Set<java.lang.String>? keysToMigrate, kotlin.jvm.functions.Function3<? super androidx.datastore.migrations.SharedPreferencesView,? super T,? super kotlin.coroutines.Continuation<? super T>,?> migrate);
    ctor public SharedPreferencesMigration(android.content.Context context, String sharedPreferencesName, kotlin.jvm.functions.Function3<? super androidx.datastore.migrations.SharedPreferencesView,? super T,? super kotlin.coroutines.Continuation<? super T>,?> migrate);
    method @kotlin.jvm.Throws(exceptionClasses=IOException::class) public suspend Object? cleanUp(kotlin.coroutines.Continuation<? super kotlin.Unit> p) throws java.io.IOException;
    method public suspend Object? migrate(T? currentData, kotlin.coroutines.Continuation<? super T> p);
    method public suspend Object? shouldMigrate(T? currentData, kotlin.coroutines.Continuation<? super java.lang.Boolean> p);
  }

  public final class SharedPreferencesMigrationKt {
  }

  public final class SharedPreferencesView {
    ctor public SharedPreferencesView(android.content.SharedPreferences prefs, java.util.Set<java.lang.String> keySet);
    method public operator boolean contains(String key);
    method public java.util.Map<java.lang.String,java.lang.Object> getAll();
    method public boolean getBoolean(String key, boolean defValue);
    method public float getFloat(String key, float defValue);
    method public int getInt(String key, int defValue);
    method public long getLong(String key, long defValue);
    method public String? getString(String key, optional String? defValue);
    method public java.util.Set<java.lang.String>? getStringSet(String key, optional java.util.Set<java.lang.String>? defValues);
  }

}

