Fauna v10 .NET/C# Driver 0.2.0-beta
 
Loading...
Searching...
No Matches
IClient.cs
Go to the documentation of this file.
1using System.Runtime.CompilerServices;
3using Fauna.Mapping;
5using Fauna.Types;
6
7namespace Fauna;
8
12interface IClient
13{
33 public Task<QuerySuccess<T>> QueryAsync<T>(
34 Query query,
35 QueryOptions? queryOptions = null,
36 CancellationToken cancel = default)
37 where T : notnull;
38
57 public Task<QuerySuccess<object?>> QueryAsync(
58 Query query,
59 QueryOptions? queryOptions = null,
60 CancellationToken cancel = default);
61
82 public Task<QuerySuccess<T>> QueryAsync<T>(
83 Query query,
84 ISerializer<T> serializer,
85 QueryOptions? queryOptions = null,
86 CancellationToken cancel = default);
87
107 public Task<QuerySuccess<object?>> QueryAsync(
108 Query query,
109 ISerializer serializer,
110 QueryOptions? queryOptions = null,
111 CancellationToken cancel = default);
112
135 public IAsyncEnumerable<Page<T>> PaginateAsync<T>(
136 Query query,
137 QueryOptions? queryOptions = null,
138 CancellationToken cancel = default)
139 where T : notnull;
140
164 public IAsyncEnumerable<Page<T>> PaginateAsync<T>(
165 Page<T> page,
166 QueryOptions? queryOptions = null,
167 CancellationToken cancel = default)
168 where T : notnull;
169
191 public IAsyncEnumerable<Page<object?>> PaginateAsync(
192 Query query,
193 QueryOptions? queryOptions = null,
194 CancellationToken cancel = default);
195
218 public IAsyncEnumerable<Page<object?>> PaginateAsync(
219 Page<object?> page,
220 QueryOptions? queryOptions = null,
221 CancellationToken cancel = default);
222
246 public IAsyncEnumerable<Page<T>> PaginateAsync<T>(
247 Query query,
248 ISerializer<T> elemSerializer,
249 QueryOptions? queryOptions = null,
250 CancellationToken cancel = default);
251
276 public IAsyncEnumerable<Page<T>> PaginateAsync<T>(
277 Page<T> page,
278 ISerializer<T> elemSerializer,
279 QueryOptions? queryOptions = null,
280 CancellationToken cancel = default);
281
304 public IAsyncEnumerable<Page<object?>> PaginateAsync(
305 Query query,
306 ISerializer elemSerializer,
307 QueryOptions? queryOptions = null,
308 CancellationToken cancel = default);
309
333 public IAsyncEnumerable<Page<object?>> PaginateAsync(
334 Page<object?> page,
335 ISerializer elemSerializer,
336 QueryOptions? queryOptions = null,
337 CancellationToken cancel = default);
338}
339
340
344public abstract class BaseClient : IClient
345{
346 internal BaseClient() { }
347
348 internal abstract MappingContext MappingCtx { get; }
349
350 internal abstract Task<QuerySuccess<T>> QueryAsyncInternal<T>(
351 Query query,
352 ISerializer<T> serializer,
353 MappingContext ctx,
354 QueryOptions? queryOptions,
355 CancellationToken cancel
356 );
357
358 #region IClient
359
360 public Task<QuerySuccess<T>> QueryAsync<T>(
361 Query query,
362 QueryOptions? queryOptions = null,
363 CancellationToken cancel = default)
364 where T : notnull =>
365 QueryAsync<T>(query, Serializer.Generate<T>(MappingCtx), queryOptions, cancel);
366
367 public Task<QuerySuccess<object?>> QueryAsync(
368 Query query,
369 QueryOptions? queryOptions = null,
370 CancellationToken cancel = default) =>
371 QueryAsync<object?>(query, Serializer.Dynamic, queryOptions, cancel);
372
373 public Task<QuerySuccess<T>> QueryAsync<T>(
374 Query query,
375 ISerializer<T> serializer,
376 QueryOptions? queryOptions = null,
377 CancellationToken cancel = default) =>
378 QueryAsyncInternal(query, serializer, MappingCtx, queryOptions, cancel);
379
380 public Task<QuerySuccess<object?>> QueryAsync(
381 Query query,
382 ISerializer serializer,
383 QueryOptions? queryOptions = null,
384 CancellationToken cancel = default) =>
385 QueryAsync<object?>(query, (ISerializer<object?>)serializer, queryOptions, cancel);
386
387 public IAsyncEnumerable<Page<T>> PaginateAsync<T>(
388 Query query,
389 QueryOptions? queryOptions = null,
390 CancellationToken cancel = default)
391 where T : notnull =>
392 PaginateAsync(query, Serializer.Generate<T>(MappingCtx), queryOptions, cancel);
393
394 public IAsyncEnumerable<Page<T>> PaginateAsync<T>(
395 Page<T> page,
396 QueryOptions? queryOptions = null,
397 CancellationToken cancel = default)
398 where T : notnull =>
399 PaginateAsync(page, Serializer.Generate<T>(MappingCtx), queryOptions, cancel);
400
401 public IAsyncEnumerable<Page<object?>> PaginateAsync(
402 Query query,
403 QueryOptions? queryOptions = null,
404 CancellationToken cancel = default) =>
405 PaginateAsync(query, Serializer.Dynamic, queryOptions, cancel);
406
407 public IAsyncEnumerable<Page<object?>> PaginateAsync(
408 Page<object?> page,
409 QueryOptions? queryOptions = null,
410 CancellationToken cancel = default) =>
411 PaginateAsync(page, Serializer.Dynamic, queryOptions, cancel);
412
413 public IAsyncEnumerable<Page<T>> PaginateAsync<T>(
414 Query query,
415 ISerializer<T> elemSerializer,
416 QueryOptions? queryOptions = null,
417 CancellationToken cancel = default)
418 {
419 var serializer = new PageSerializer<T>(elemSerializer);
420 return PaginateAsyncInternal(query, serializer, queryOptions, cancel);
421 }
422
423 public IAsyncEnumerable<Page<T>> PaginateAsync<T>(
424 Page<T> page,
425 ISerializer<T> elemSerializer,
426 QueryOptions? queryOptions = null,
427 CancellationToken cancel = default)
428 {
429 var serializer = new PageSerializer<T>(elemSerializer);
430 return PaginateAsyncInternal(page, serializer, queryOptions, cancel);
431 }
432
433 public IAsyncEnumerable<Page<object?>> PaginateAsync(
434 Query query,
435 ISerializer elemSerializer,
436 QueryOptions? queryOptions = null,
437 CancellationToken cancel = default)
438 {
439 var elemObjSer = (ISerializer<object?>)elemSerializer;
440 var serializer = new PageSerializer<object?>(elemObjSer);
441 return PaginateAsyncInternal(query, serializer, queryOptions, cancel);
442 }
443
444 public IAsyncEnumerable<Page<object?>> PaginateAsync(
445 Page<object?> page,
446 ISerializer elemSerializer,
447 QueryOptions? queryOptions = null,
448 CancellationToken cancel = default)
449 {
450 var elemObjSer = (ISerializer<object?>)elemSerializer;
451 var serializer = new PageSerializer<object?>(elemObjSer);
452 return PaginateAsyncInternal(page, serializer, queryOptions, cancel);
453 }
454
455 #endregion
456
457 // Internally accessible for QuerySource use
458 internal async IAsyncEnumerable<Page<T>> PaginateAsyncInternal<T>(
459 Query query,
460 PageSerializer<T> serializer,
461 QueryOptions? queryOptions,
462 [EnumeratorCancellation] CancellationToken cancel = default)
463 {
464 var p = await QueryAsyncInternal(query,
465 serializer,
466 MappingCtx,
467 queryOptions,
468 cancel);
469
470 await foreach (var page in PaginateAsyncInternal(p.Data, serializer, queryOptions, cancel))
471 {
472 yield return page;
473 }
474 }
475
476 private async IAsyncEnumerable<Page<T>> PaginateAsyncInternal<T>(
477 Page<T> page,
478 PageSerializer<T> serializer,
479 QueryOptions? queryOptions,
480 [EnumeratorCancellation] CancellationToken cancel = default)
481 {
482 yield return page;
483
484 while (page.After is not null)
485 {
486 var q = new QueryExpr(new QueryLiteral($"Set.paginate('{page.After}')"));
487
488 var response = await QueryAsyncInternal(q,
489 serializer,
490 MappingCtx,
491 queryOptions,
492 cancel);
493
494 page = response.Data;
495 yield return page;
496 }
497 }
498}
The base class for Client and DataContext.
Definition IClient.cs:345
IAsyncEnumerable< Page< T > > PaginateAsync< T >(Query query, QueryOptions? queryOptions=null, CancellationToken cancel=default)
Asynchronously iterates over pages of a Fauna query result, automatically fetching subsequent pages u...
IAsyncEnumerable< Page< object?> > PaginateAsync(Query query, QueryOptions? queryOptions=null, CancellationToken cancel=default)
Asynchronously iterates over pages of a Fauna query result, automatically fetching subsequent pages u...
IAsyncEnumerable< Page< object?> > PaginateAsync(Query query, ISerializer elemSerializer, QueryOptions? queryOptions=null, CancellationToken cancel=default)
Asynchronously iterates over pages of a Fauna query result, automatically fetching subsequent pages u...
Definition IClient.cs:433
Task< QuerySuccess< object?> > QueryAsync(Query query, ISerializer serializer, QueryOptions? queryOptions=null, CancellationToken cancel=default)
Asynchronously executes a specified FQL query against the Fauna database and returns the typed result...
IAsyncEnumerable< Page< object?> > PaginateAsync(Page< object?> page, ISerializer elemSerializer, QueryOptions? queryOptions=null, CancellationToken cancel=default)
Asynchronously iterates over pages of a Fauna query result, automatically fetching subsequent pages u...
Definition IClient.cs:444
Task< QuerySuccess< object?> > QueryAsync(Query query, QueryOptions? queryOptions=null, CancellationToken cancel=default)
Asynchronously executes a specified FQL query against the Fauna database.
Task< QuerySuccess< T > > QueryAsync< T >(Query query, QueryOptions? queryOptions=null, CancellationToken cancel=default)
Asynchronously executes a specified FQL query against the Fauna database and returns the typed result...
IAsyncEnumerable< Page< object?> > PaginateAsync(Page< object?> page, QueryOptions? queryOptions=null, CancellationToken cancel=default)
Asynchronously iterates over pages of a Fauna query result, automatically fetching subsequent pages u...
A class representing the mapping context to be used during serialization and deserialization.
Represents an FQL query expression. This class encapsulates a list of IQueryFragment instances,...
Definition QueryExpr.cs:11
Represents the abstract base class for constructing FQL queries.
Definition Query.cs:11
Represents a literal part of an FQL query. This class is used for embedding raw string values directl...
Represents the options for customizing Fauna queries.
Represents a client for interacting with a Fauna.
Definition IClient.cs:13
IAsyncEnumerable< Page< T > > PaginateAsync< T >(Query query, QueryOptions? queryOptions=null, CancellationToken cancel=default)
Asynchronously iterates over pages of a Fauna query result, automatically fetching subsequent pages u...
IAsyncEnumerable< Page< object?> > PaginateAsync(Page< object?> page, QueryOptions? queryOptions=null, CancellationToken cancel=default)
Asynchronously iterates over pages of a Fauna query result, automatically fetching subsequent pages u...
IAsyncEnumerable< Page< object?> > PaginateAsync(Page< object?> page, ISerializer elemSerializer, QueryOptions? queryOptions=null, CancellationToken cancel=default)
Asynchronously iterates over pages of a Fauna query result, automatically fetching subsequent pages u...
Task< QuerySuccess< object?> > QueryAsync(Query query, ISerializer serializer, QueryOptions? queryOptions=null, CancellationToken cancel=default)
Asynchronously executes a specified FQL query against the Fauna database and returns the typed result...
Task< QuerySuccess< T > > QueryAsync< T >(Query query, QueryOptions? queryOptions=null, CancellationToken cancel=default)
Asynchronously executes a specified FQL query against the Fauna database and returns the typed result...
IAsyncEnumerable< Page< object?> > PaginateAsync(Query query, QueryOptions? queryOptions=null, CancellationToken cancel=default)
Asynchronously iterates over pages of a Fauna query result, automatically fetching subsequent pages u...
IAsyncEnumerable< Page< object?> > PaginateAsync(Query query, ISerializer elemSerializer, QueryOptions? queryOptions=null, CancellationToken cancel=default)
Asynchronously iterates over pages of a Fauna query result, automatically fetching subsequent pages u...
Task< QuerySuccess< object?> > QueryAsync(Query query, QueryOptions? queryOptions=null, CancellationToken cancel=default)
Asynchronously executes a specified FQL query against the Fauna database.
record Page< T >(IReadOnlyList< T > Data, string? After)
Represents a page in a dataset for pagination.
Definition Client.cs:8