// // Copyright (c) 2019 Open Whisper Systems. All rights reserved. // import Foundation import PromiseKit public extension YapDatabaseConnection { @objc func readWritePromise(_ block: @escaping (YapDatabaseReadWriteTransaction) -> Void) -> AnyPromise { return AnyPromise(readWritePromise(block) as Promise) } func readWritePromise(_ block: @escaping (YapDatabaseReadWriteTransaction) -> Void) -> Promise { return Promise { resolver in self.asyncReadWrite(block, completionBlock: { resolver.fulfill(()) }) } } func read(_ block: @escaping (YapDatabaseReadTransaction) throws -> Void) throws { var errorToRaise: Error? read { transaction in do { try block(transaction) } catch { errorToRaise = error } } if let errorToRaise = errorToRaise { throw errorToRaise } } func readWrite(_ block: @escaping (YapDatabaseReadWriteTransaction) throws -> Void) throws { var errorToRaise: Error? readWrite { transaction in do { try block(transaction) } catch { errorToRaise = error } } if let errorToRaise = errorToRaise { throw errorToRaise } } }