From 744450d0b973e5ea1309971bf60fe82d58c9b295 Mon Sep 17 00:00:00 2001 From: Darin Fisher Date: Fri, 15 Mar 2024 18:24:19 -0700 Subject: [PATCH] Expose Firestore.terminate Also fixes signature of `clearPermanence` to allow for a nil completion callback to match the Obj C API. --- .../FirebaseFirestore/Firestore+Swift.swift | 28 +++++++++++++++++-- Sources/firebase/include/FirebaseFirestore.hh | 5 ++++ 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/Sources/FirebaseFirestore/Firestore+Swift.swift b/Sources/FirebaseFirestore/Firestore+Swift.swift index 2bcebf1..51209af 100644 --- a/Sources/FirebaseFirestore/Firestore+Swift.swift +++ b/Sources/FirebaseFirestore/Firestore+Swift.swift @@ -44,11 +44,13 @@ public class Firestore { } } - public func clearPersistence(completion: @escaping () -> Void) { + public func clearPersistence(completion: (() -> Void)?) { let future = swift_firebase.swift_cxx_shims.firebase.firestore.firestore_clear_persistence(impl) future.setCompletion({ - DispatchQueue.main.async { - completion() + if let completion { + DispatchQueue.main.async { + completion() + } } }) } @@ -62,6 +64,26 @@ public class Firestore { } } + public func terminate(completion: (() -> Void)?) { + let future = swift_firebase.swift_cxx_shims.firebase.firestore.firestore_terminate(impl) + future.setCompletion({ + if let completion { + DispatchQueue.main.async { + completion() + } + } + }) + } + + public func terminate() async { + await withCheckedContinuation { continuation in + let future = swift_firebase.swift_cxx_shims.firebase.firestore.firestore_terminate(impl) + future.setCompletion({ + continuation.resume() + }) + } + } + public func document(_ documentPath: String) -> DocumentReference { swift_firebase.swift_cxx_shims.firebase.firestore.firestore_document(impl, std.string(documentPath)) } diff --git a/Sources/firebase/include/FirebaseFirestore.hh b/Sources/firebase/include/FirebaseFirestore.hh index c9115ea..9445a0e 100644 --- a/Sources/firebase/include/FirebaseFirestore.hh +++ b/Sources/firebase/include/FirebaseFirestore.hh @@ -31,6 +31,11 @@ firestore_clear_persistence(::firebase::firestore::Firestore *firestore) { return VoidFuture::From(firestore->ClearPersistence()); } +inline VoidFuture +firestore_terminate(::firebase::firestore::Firestore *firestore) { + return VoidFuture::From(firestore->Terminate()); +} + inline ::firebase::firestore::DocumentReference firestore_document(::firebase::firestore::Firestore *firestore, const ::std::string &document_path) {