in oplog/txn_buffer.go [361:400]
func bsonDocToOplog(doc bson.D) (*ParsedLog, error) {
op := ParsedLog{}
for _, v := range doc {
switch v.Key {
case "op":
s, ok := v.Value.(string)
if !ok {
return nil, fmt.Errorf(opConvertErrorFmt, "op field", "not a string")
}
op.Operation = s
case "ns":
s, ok := v.Value.(string)
if !ok {
return nil, fmt.Errorf(opConvertErrorFmt, "ns field", "not a string")
}
op.Namespace = s
case "o":
d, ok := v.Value.(bson.D)
if !ok {
return nil, fmt.Errorf(opConvertErrorFmt, "o field", "not a BSON Document")
}
op.Object = d
case "o2":
d, ok := v.Value.(bson.D)
if !ok {
return nil, fmt.Errorf(opConvertErrorFmt, "o2 field", "not a BSON Document")
}
op.Query = d
case "ui":
u, ok := v.Value.(primitive.Binary)
if !ok {
return nil, fmt.Errorf(opConvertErrorFmt, "ui field", "not binary data")
}
op.UI = &u
}
}
return &op, nil
}