Skip to content

Conversation

@peterfriese
Copy link
Contributor

This change introduces Swift AsyncSequence support for Firebase Realtime Database, enabling a modern, structured concurrency approach for observing data.

Key changes include:

  • DatabaseQuery.snapshots: An asynchronous sequence for value events, consistent with Firestore's snapshots and Android's RTDB snapshots().
  • DatabaseQuery.childEvents(): An asynchronous sequence for child events (childAdded, childChanged, childRemoved, childMoved), consistent with Android's RTDB childEvents().
  • Implementation uses the AsyncIteratorProtocol pattern, aligning with the Firestore SDK for Sendable compliance and lazy listener initialization.
  • DatabaseQuery is marked @retroactive @unchecked Sendable to resolve concurrency warnings.
  • The handles array in DatabaseChildEventsSequence.Iterator.init is explicitly captured by value in onTermination to prevent concurrency issues.
  • Added usage tests to DatabaseAPITests.swift.
  • Refactored Sendable conformances to be grouped together for better readability.

This change introduces Swift AsyncSequence support for Firebase Realtime Database, enabling a modern, structured concurrency approach for observing data.

Key changes include:
- `DatabaseQuery.snapshots`: An asynchronous sequence for value events, consistent with Firestore's `snapshots` and Android's RTDB `snapshots()`.
- `DatabaseQuery.childEvents()`: An asynchronous sequence for child events (`childAdded`, `childChanged`, `childRemoved`, `childMoved`), consistent with Android's RTDB `childEvents()`.
- Implementation uses the `AsyncIteratorProtocol` pattern, aligning with the Firestore SDK for `Sendable` compliance and lazy listener initialization.
- `DatabaseQuery` is marked `@retroactive @unchecked Sendable` to resolve concurrency warnings.
- The `handles` array in `DatabaseChildEventsSequence.Iterator.init` is explicitly captured by value in `onTermination` to prevent concurrency issues.
- Added usage tests to `DatabaseAPITests.swift`.
- Refactored Sendable conformances to be grouped together for better readability.
@gemini-code-assist
Copy link
Contributor

Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

@google-oss-bot
Copy link

1 Warning
⚠️ Did you forget to add a changelog entry? (Add #no-changelog to the PR description to silence this warning.)

Generated by 🚫 Danger

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants