//
// Copyright 2023 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
//

import Foundation

/// Wrapper around `SDSAnyReadTransaction` that allows the generation
/// of a "fake" instance in tests without touching existing code.
///
/// There should only ever be two concrete implementations of this
/// protocol: `SDSDB.ReadTx` and `MockReadTransaction`.
///
/// Users can bridge to `SDSAnyReadTransaction` by using `SDSDB.shimOnlyBridge`;
/// this is made intentionally cumbersome as it should **never** be used in
/// any concrete class and **only** in shim classes that bridge to old-style code.
public protocol DBReadTransaction: AnyObject {}

/// Wrapper around `SDSAnyWriteTransaction` that allows the generation
/// of a "fake" instance in tests without touching existing code.
///
/// There should only ever be two concrete implementations of this
/// protocol: `SDSDB.WriteTx` and `MockWriteTransaction`
///
/// Users can bridge to `SDSAnyWriteTransaction` by using `SDSDB.shimOnlyBridge`;
/// this is made intentionally cumbersome as it should **never** be used in
/// any concrete class and **only** in shim classes that bridge to old-style code.
public protocol DBWriteTransaction: DBReadTransaction {
    func addSyncCompletion(_ block: @escaping () -> Void)
    func addAsyncCompletion(on scheduler: Scheduler, _ block: @escaping () -> Void)
}
