Fauna v10 .NET/C# Driver 0.2.0-beta
 
Loading...
Searching...
No Matches
PageSerializer.cs
Go to the documentation of this file.
1using Fauna.Mapping;
2using Fauna.Types;
3
4namespace Fauna.Serialization;
5
6internal class PageSerializer<T> : BaseSerializer<Page<T>>
7{
8 private readonly ISerializer<List<T>> _dataSerializer;
9
10 public PageSerializer(ISerializer<T> elemSerializer)
11 {
12 _dataSerializer = new ListSerializer<T>(elemSerializer);
13 }
14
15 public override Page<T> Deserialize(MappingContext context, ref Utf8FaunaReader reader)
16 {
17 var wrapInPage = false;
18 var endToken = TokenType.None;
19 switch (reader.CurrentTokenType)
20 {
21 case TokenType.StartPage:
22 endToken = TokenType.EndPage;
23 break;
24 case TokenType.StartObject:
25 endToken = TokenType.EndObject;
26 break;
27 default:
28 wrapInPage = true;
29 break;
30 }
31
32 List<T>? data = null;
33 string? after = null;
34
35 if (wrapInPage)
36 {
37 data = _dataSerializer.Deserialize(context, ref reader);
38 }
39 else
40 {
41 while (reader.Read() && reader.CurrentTokenType != endToken)
42 {
43 var fieldName = reader.GetString()!;
44 reader.Read();
45
46 switch (fieldName)
47 {
48 case "data":
49 data = _dataSerializer.Deserialize(context, ref reader);
50 break;
51 case "after":
52 after = reader.GetString()!;
53 break;
54 }
55 }
56 }
57
58 if (data is null)
59 throw new SerializationException($"No page data found while deserializing into {typeof(Page<T>)}");
60
61 return new Page<T>(data!, after);
62 }
63
64 public override void Serialize(MappingContext context, Utf8FaunaWriter writer, object? o)
65 {
66 DynamicSerializer.Singleton.Serialize(context, writer, o);
67 }
68}
A class representing the mapping context to be used during serialization and deserialization.
TokenType
Enumerates the types of tokens used in Fauna serialization.
Definition TokenType.cs:7
record Page< T >(IReadOnlyList< T > Data, string? After)
Represents a page in a dataset for pagination.