forked from mongodb/mongo-csharp-driver
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathChangeStreamDocumentSerializer.cs
75 lines (68 loc) · 3.67 KB
/
ChangeStreamDocumentSerializer.cs
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
/* Copyright 2017-present MongoDB Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
using MongoDB.Bson;
using MongoDB.Bson.Serialization;
using MongoDB.Bson.Serialization.Serializers;
using MongoDB.Driver.Core.Misc;
namespace MongoDB.Driver
{
/// <summary>
/// A serializer for ChangeStreamDocument instances.
/// </summary>
/// <typeparam name="TDocument">The type of the document.</typeparam>
public class ChangeStreamDocumentSerializer<TDocument> : BsonDocumentBackedClassSerializer<ChangeStreamDocument<TDocument>>
{
// private fields
private readonly IBsonSerializer<TDocument> _documentSerializer;
// constructors
/// <summary>
/// Initializes a new instance of the <see cref="ChangeStreamDocumentSerializer{TDocument}"/> class.
/// </summary>
/// <param name="documentSerializer">The document serializer.</param>
public ChangeStreamDocumentSerializer(
IBsonSerializer<TDocument> documentSerializer)
{
_documentSerializer = Ensure.IsNotNull(documentSerializer, nameof(documentSerializer));
RegisterMember("ClusterTime", "clusterTime", BsonTimestampSerializer.Instance);
RegisterMember("CollectionNamespace", "ns", ChangeStreamDocumentCollectionNamespaceSerializer.Instance);
RegisterMember("CollectionUuid", "ui", GuidSerializer.StandardInstance);
RegisterMember("DatabaseNamespace", "ns", ChangeStreamDocumentDatabaseNamespaceSerializer.Instance);
RegisterMember("DisambiguatedPaths", "disambiguatedPaths", BsonDocumentSerializer.Instance);
RegisterMember("DocumentKey", "documentKey", BsonDocumentSerializer.Instance);
RegisterMember("FullDocument", "fullDocument", _documentSerializer);
RegisterMember("FullDocumentBeforeChange", "fullDocumentBeforeChange", _documentSerializer);
RegisterMember("OperationDescription", "operationDescription", BsonDocumentSerializer.Instance);
RegisterMember("OperationType", "operationType", ChangeStreamOperationTypeSerializer.Instance);
RegisterMember("RenameTo", "to", ChangeStreamDocumentCollectionNamespaceSerializer.Instance);
RegisterMember("ResumeToken", "_id", BsonDocumentSerializer.Instance);
RegisterMember("SplitEvent", "splitEvent", ChangeStreamSplitEventSerializer.Instance);
RegisterMember("UpdateDescription", "updateDescription", ChangeStreamUpdateDescriptionSerializer.Instance);
RegisterMember("WallTime", "wallTime", DateTimeSerializer.UtcInstance);
}
// public methods
/// <inheritdoc />
public override ChangeStreamDocument<TDocument> Deserialize(BsonDeserializationContext context, BsonDeserializationArgs args)
{
context = context.With(b => b.AllowDuplicateElementNames = true);
return base.Deserialize(context, args);
}
// protected methods
/// <inheritdoc />
protected override ChangeStreamDocument<TDocument> CreateInstance(BsonDocument backingDocument)
{
return new ChangeStreamDocument<TDocument>(backingDocument, _documentSerializer);
}
}
}