summaryrefslogtreecommitdiff
path: root/dsa/FireBase/Query/IFirebaseQuery.cs
blob: 0da4b15746f97f43add96be811297e88d570cd46 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Firebase.Database.Streaming;

namespace Firebase.Database.Query
{
    /// <summary>
    ///     The FirebaseQuery interface.
    /// </summary>
    public interface IFirebaseQuery
    {
        /// <summary>
        ///     Gets the owning client of this query.
        /// </summary>
        FirebaseClient Client { get; }

        /// <summary>
        ///     Retrieves items which exist on the location specified by this query instance.
        /// </summary>
        /// <param name="timeout"> Optional timeout value. </param>
        /// <typeparam name="T"> Type of the items. </typeparam>
        /// <returns> Collection of <see cref="FirebaseObject{T}" />. </returns>
        Task<IReadOnlyCollection<FirebaseObject<T>>> OnceAsync<T>(TimeSpan? timeout = null);

        /// <summary>
        ///     Returns current location as an observable which allows to real-time listening to events from the firebase server.
        /// </summary>
        /// <typeparam name="T"> Type of the items. </typeparam>
        /// <returns> Cold observable of <see cref="FirebaseEvent{T}" />. </returns>
        IObservable<FirebaseEvent<T>> AsObservable<T>(
            EventHandler<ExceptionEventArgs<FirebaseException>> exceptionHandler, string elementRoot = "");

        /// <summary>
        ///     Builds the actual url of this query.
        /// </summary>
        /// <returns> The <see cref="string" />. </returns>
        Task<string> BuildUrlAsync();
    }
}