INNER CODE UNIT · Swift
withTransaction
orlandos-nl/MongoKitten · Sources/Meow/Database.swift:33
public func withTransaction<T>(
with options: MongoSessionOptions = .init(),
transactionOptions: MongoTransactionOptions? = nil,
perform: (MeowTransactionDatabase) async throws -> T
) async throws -> T {
let transaction = try await raw.startTransaction(autoCommitChanges: false, with: options, transactionOptions: transactionOptions)
let meowDatabase = MeowTransactionDatabase(transaction)
do {
let result = try await perform(meowDatabase)
try await transaction.commit()
return result
} catch {
try await transaction.abort()
throw error
}
}
}