...
1
2
3
4
5
6
7 package description
8
9 import (
10 "fmt"
11
12 "go.mongodb.org/mongo-driver/bson"
13 "go.mongodb.org/mongo-driver/bson/primitive"
14 )
15
16
17 type TopologyVersion struct {
18 ProcessID primitive.ObjectID
19 Counter int64
20 }
21
22
23 func NewTopologyVersion(doc bson.Raw) (*TopologyVersion, error) {
24 elements, err := doc.Elements()
25 if err != nil {
26 return nil, err
27 }
28 var tv TopologyVersion
29 var ok bool
30 for _, element := range elements {
31 switch element.Key() {
32 case "processId":
33 tv.ProcessID, ok = element.Value().ObjectIDOK()
34 if !ok {
35 return nil, fmt.Errorf("expected 'processId' to be a objectID but it's a BSON %s", element.Value().Type)
36 }
37 case "counter":
38 tv.Counter, ok = element.Value().Int64OK()
39 if !ok {
40 return nil, fmt.Errorf("expected 'counter' to be an int64 but it's a BSON %s", element.Value().Type)
41 }
42 }
43 }
44 return &tv, nil
45 }
46
47
48
49
50
51
52 func (tv *TopologyVersion) CompareToIncoming(responseTV *TopologyVersion) int {
53 if tv == nil || responseTV == nil {
54 return -1
55 }
56 if tv.ProcessID != responseTV.ProcessID {
57 return -1
58 }
59 if tv.Counter == responseTV.Counter {
60 return 0
61 }
62 if tv.Counter < responseTV.Counter {
63 return -1
64 }
65 return 1
66 }
67
View as plain text