// UnmarshalBson unmarshals QueryShard from buf. func (qrs *QueryShard) UnmarshalBson(buf *bytes.Buffer) { bson.Next(buf, 4) kind := bson.NextByte(buf) for kind != bson.EOO { key := bson.ReadCString(buf) switch key { case "Sql": qrs.Sql = bson.DecodeString(buf, kind) case "BindVariables": qrs.BindVariables = tproto.DecodeBindVariablesBson(buf, kind) case "Keyspace": qrs.Keyspace = bson.DecodeString(buf, kind) case "TabletType": qrs.TabletType = topo.TabletType(bson.DecodeString(buf, kind)) case "Shards": qrs.Shards = bson.DecodeStringArray(buf, kind) case "Session": qrs.Session = new(Session) qrs.Session.UnmarshalBson(buf) default: panic(bson.NewBsonError("Unrecognized tag %s", key)) } kind = bson.NextByte(buf) } }
// UnmarshalBson bson-decodes into A. func (a *A) UnmarshalBson(buf *bytes.Buffer, kind byte) { switch kind { case bson.EOO, bson.Object: // valid case bson.Null: return default: panic(bson.NewBsonError("unexpected kind %v for A", kind)) } bson.Next(buf, 4) for kind := bson.NextByte(buf); kind != bson.EOO; kind = bson.NextByte(buf) { switch bson.ReadCString(buf) { case "Name": a.Name = bson.DecodeString(buf, kind) case "BirthDay": a.BirthDay = bson.DecodeTime(buf, kind) case "Phone": a.Phone = bson.DecodeString(buf, kind) case "Siblings": a.Siblings = bson.DecodeInt(buf, kind) case "Spouse": a.Spouse = bson.DecodeBool(buf, kind) case "Money": a.Money = bson.DecodeFloat64(buf, kind) default: bson.Skip(buf, kind) } } }
// UnmarshalBson bson-decodes into SessionInfo. func (sessionInfo *SessionInfo) UnmarshalBson(buf *bytes.Buffer, kind byte) { switch kind { case bson.EOO, bson.Object: // valid case bson.Null: return default: panic(bson.NewBsonError("unexpected kind %v for SessionInfo", kind)) } bson.Next(buf, 4) for kind := bson.NextByte(buf); kind != bson.EOO; kind = bson.NextByte(buf) { switch bson.ReadCString(buf) { case "SessionId": sessionInfo.SessionId = bson.DecodeInt64(buf, kind) case "Err": // *mproto.RPCError if kind != bson.Null { sessionInfo.Err = new(mproto.RPCError) (*sessionInfo.Err).UnmarshalBson(buf, kind) } default: bson.Skip(buf, kind) } } }
func DecodeSrvShardArray(buf *bytes.Buffer, kind byte) []SrvShard { switch kind { case bson.Array: // valid case bson.Null: return nil default: panic(bson.NewBsonError("Unexpected data type %v for SrvShard array", kind)) } bson.Next(buf, 4) values := make([]SrvShard, 0, 8) kind = bson.NextByte(buf) for i := 0; kind != bson.EOO; i++ { if kind != bson.Object { panic(bson.NewBsonError("Unexpected data type %v for SrvShard array", kind)) } bson.ExpectIndex(buf, i) value := &SrvShard{} value.UnmarshalBson(buf) values = append(values, *value) kind = bson.NextByte(buf) } return values }
func UnmarshalPKRowBson(buf *bytes.Buffer, kind byte) []interface{} { switch kind { case bson.Array: // valid case bson.Null: return nil default: panic(bson.NewBsonError("Unexpected data type %v for Query.Row", kind)) } bson.Next(buf, 4) row := make([]interface{}, 0, 8) kind = bson.NextByte(buf) for i := 0; kind != bson.EOO; i++ { bson.ExpectIndex(buf, i) var val interface{} switch kind { case bson.Binary, bson.String: val = bson.DecodeString(buf, kind) case bson.Long: val = bson.DecodeInt64(buf, kind) case bson.Ulong: val = bson.DecodeUint64(buf, kind) } row = append(row, val) kind = bson.NextByte(buf) } return row }
func (sqs *StreamQueryKeyRange) UnmarshalBson(buf *bytes.Buffer, kind byte) { bson.VerifyObject(kind) bson.Next(buf, 4) kind = bson.NextByte(buf) for kind != bson.EOO { keyName := bson.ReadCString(buf) switch keyName { case "Sql": sqs.Sql = bson.DecodeString(buf, kind) case "BindVariables": sqs.BindVariables = tproto.DecodeBindVariablesBson(buf, kind) case "Keyspace": sqs.Keyspace = bson.DecodeString(buf, kind) case "KeyRange": sqs.KeyRange = bson.DecodeString(buf, kind) case "TabletType": sqs.TabletType = topo.TabletType(bson.DecodeString(buf, kind)) case "Session": if kind != bson.Null { sqs.Session = new(Session) sqs.Session.UnmarshalBson(buf, kind) } default: bson.Skip(buf, kind) } kind = bson.NextByte(buf) } }
// UnmarshalBson bson-decodes into ShardSession. func (shardSession *ShardSession) UnmarshalBson(buf *bytes.Buffer, kind byte) { switch kind { case bson.EOO, bson.Object: // valid case bson.Null: return default: panic(bson.NewBsonError("unexpected kind %v for ShardSession", kind)) } bson.Next(buf, 4) for kind := bson.NextByte(buf); kind != bson.EOO; kind = bson.NextByte(buf) { switch bson.ReadCString(buf) { case "Keyspace": shardSession.Keyspace = bson.DecodeString(buf, kind) case "Shard": shardSession.Shard = bson.DecodeString(buf, kind) case "TabletType": shardSession.TabletType.UnmarshalBson(buf, kind) case "TransactionId": shardSession.TransactionId = bson.DecodeInt64(buf, kind) default: bson.Skip(buf, kind) } } }
func (zkNode *ZkNode) UnmarshalBson(buf *bytes.Buffer) { bson.Next(buf, 4) kind := bson.NextByte(buf) for kind != bson.EOO { key := bson.ReadCString(buf) switch key { case "Path": zkNode.Path = bson.DecodeString(buf, kind) case "Data": zkNode.Data = bson.DecodeString(buf, kind) case "Stat": if kind != bson.Object { panic(bson.NewBsonError("Unexpected data type %v for Stat", kind)) } zkNode.Stat.UnmarshalBson(buf) case "Children": zkNode.Children = bson.DecodeStringArray(buf, kind) case "Cached": zkNode.Cached = bson.DecodeBool(buf, kind) case "Stale": zkNode.Stale = bson.DecodeBool(buf, kind) default: panic(bson.NewBsonError("Unrecognized tag %s for ZkNode", key)) } kind = bson.NextByte(buf) } }
func unmarshalZkNodeArray(buf *bytes.Buffer, name string, kind byte) []*ZkNode { switch kind { case bson.Array: // valid case bson.Null: return nil default: panic(bson.NewBsonError("Unexpected data type %v for %v", kind, name)) } bson.Next(buf, 4) values := make([]*ZkNode, 0, 8) kind = bson.NextByte(buf) for i := 0; kind != bson.EOO; i++ { if kind != bson.Object { panic(bson.NewBsonError("Unexpected data type %v for %v", kind, name)) } bson.ExpectIndex(buf, i) zkNode := &ZkNode{} zkNode.UnmarshalBson(buf) values = append(values, zkNode) kind = bson.NextByte(buf) } return values }
func (sk *SrvKeyspace) UnmarshalBson(buf *bytes.Buffer, kind byte) { bson.VerifyObject(kind) bson.Next(buf, 4) kind = bson.NextByte(buf) for kind != bson.EOO { keyName := bson.ReadCString(buf) switch keyName { case "Partitions": sk.Partitions = DecodeKeyspacePartitionMap(buf, kind) case "Shards": sk.Shards = DecodeSrvShardArray(buf, kind) case "TabletTypes": sk.TabletTypes = DecodeTabletTypeArray(buf, kind) case "ShardingColumnName": sk.ShardingColumnName = bson.DecodeString(buf, kind) case "ShardingColumnType": sk.ShardingColumnType = key.KeyspaceIdType(bson.DecodeString(buf, kind)) case "ServedFrom": sk.ServedFrom = DecodeServedFrom(buf, kind) default: bson.Skip(buf, kind) } kind = bson.NextByte(buf) } }
func (zkStat *ZkStat) UnmarshalBson(buf *bytes.Buffer) { bson.Next(buf, 4) kind := bson.NextByte(buf) for kind != bson.EOO { key := bson.ReadCString(buf) switch key { case "Czxid": zkStat.czxid = bson.DecodeInt64(buf, kind) case "Mzxid": zkStat.mzxid = bson.DecodeInt64(buf, kind) case "CTime": zkStat.cTime = bson.DecodeTime(buf, kind) case "MTime": zkStat.mTime = bson.DecodeTime(buf, kind) case "Version": zkStat.version = bson.DecodeInt(buf, kind) case "CVersion": zkStat.cVersion = bson.DecodeInt(buf, kind) case "AVersion": zkStat.aVersion = bson.DecodeInt(buf, kind) case "EphemeralOwner": zkStat.ephemeralOwner = bson.DecodeInt64(buf, kind) case "DataLength": zkStat.dataLength = bson.DecodeInt(buf, kind) case "NumChildren": zkStat.numChildren = bson.DecodeInt(buf, kind) case "Pzxid": zkStat.pzxid = bson.DecodeInt64(buf, kind) default: panic(bson.NewBsonError("Unrecognized tag %s for ZkStat", key)) } kind = bson.NextByte(buf) } }
// UnmarshalBson bson-decodes into MyType. func (myType *MyType) UnmarshalBson(buf *bytes.Buffer, kind byte) { switch kind { case bson.EOO, bson.Object: // valid case bson.Null: return default: panic(bson.NewBsonError("unexpected kind %v for MyType", kind)) } bson.Next(buf, 4) for kind := bson.NextByte(buf); kind != bson.EOO; kind = bson.NextByte(buf) { switch bson.ReadCString(buf) { case "Cust1": myType.Cust1.UnmarshalBson(buf, kind) case "Cust2": // *Custom1 if kind != bson.Null { myType.Cust2 = new(Custom1) (*myType.Cust2).UnmarshalBson(buf, kind) } case "Cust3": myType.Cust3.UnmarshalBson(buf, kind) case "Cust4": // *pkg.Custom2 if kind != bson.Null { myType.Cust4 = new(pkg.Custom2) (*myType.Cust4).UnmarshalBson(buf, kind) } default: bson.Skip(buf, kind) } } }
// UnmarshalBson bson-decodes into KeyspacePartition. func (keyspacePartition *KeyspacePartition) UnmarshalBson(buf *bytes.Buffer, kind byte) { switch kind { case bson.EOO, bson.Object: // valid case bson.Null: return default: panic(bson.NewBsonError("unexpected kind %v for KeyspacePartition", kind)) } bson.Next(buf, 4) for kind := bson.NextByte(buf); kind != bson.EOO; kind = bson.NextByte(buf) { switch bson.ReadCString(buf) { case "ShardReferences": // []ShardReference if kind != bson.Null { if kind != bson.Array { panic(bson.NewBsonError("unexpected kind %v for keyspacePartition.ShardReferences", kind)) } bson.Next(buf, 4) keyspacePartition.ShardReferences = make([]ShardReference, 0, 8) for kind := bson.NextByte(buf); kind != bson.EOO; kind = bson.NextByte(buf) { bson.SkipIndex(buf) var _v1 ShardReference _v1.UnmarshalBson(buf, kind) keyspacePartition.ShardReferences = append(keyspacePartition.ShardReferences, _v1) } } default: bson.Skip(buf, kind) } } }
// UnmarshalBson unmarshals QueryResult from buf. func (qr *QueryResult) UnmarshalBson(buf *bytes.Buffer) { bson.Next(buf, 4) kind := bson.NextByte(buf) for kind != bson.EOO { key := bson.ReadCString(buf) switch key { case "Fields": qr.Fields = mproto.DecodeFieldsBson(buf, kind) case "RowsAffected": qr.RowsAffected = bson.DecodeUint64(buf, kind) case "InsertId": qr.InsertId = bson.DecodeUint64(buf, kind) case "Rows": qr.Rows = mproto.DecodeRowsBson(buf, kind) case "Session": qr.Session = new(Session) qr.Session.UnmarshalBson(buf) case "Error": qr.Error = bson.DecodeString(buf, kind) default: panic(bson.NewBsonError("Unrecognized tag %s", key)) } kind = bson.NextByte(buf) } }
// UnmarshalBson unmarshals QueryResult from buf. func (qr *QueryResult) UnmarshalBson(buf *bytes.Buffer, kind byte) { bson.VerifyObject(kind) bson.Next(buf, 4) kind = bson.NextByte(buf) for kind != bson.EOO { keyName := bson.ReadCString(buf) switch keyName { case "Fields": qr.Fields = mproto.DecodeFieldsBson(buf, kind) case "RowsAffected": qr.RowsAffected = bson.DecodeUint64(buf, kind) case "InsertId": qr.InsertId = bson.DecodeUint64(buf, kind) case "Rows": qr.Rows = mproto.DecodeRowsBson(buf, kind) case "Session": if kind != bson.Null { qr.Session = new(Session) qr.Session.UnmarshalBson(buf, kind) } case "Error": qr.Error = bson.DecodeString(buf, kind) default: bson.Skip(buf, kind) } kind = bson.NextByte(buf) } }
// UnmarshalBson bson-decodes into QueryResultList. func (queryResultList *QueryResultList) UnmarshalBson(buf *bytes.Buffer, kind byte) { switch kind { case bson.EOO, bson.Object: // valid case bson.Null: return default: panic(bson.NewBsonError("unexpected kind %v for QueryResultList", kind)) } bson.Next(buf, 4) for kind := bson.NextByte(buf); kind != bson.EOO; kind = bson.NextByte(buf) { switch bson.ReadCString(buf) { case "List": // []mproto.QueryResult if kind != bson.Null { if kind != bson.Array { panic(bson.NewBsonError("unexpected kind %v for queryResultList.List", kind)) } bson.Next(buf, 4) queryResultList.List = make([]mproto.QueryResult, 0, 8) for kind := bson.NextByte(buf); kind != bson.EOO; kind = bson.NextByte(buf) { bson.SkipIndex(buf) var _v1 mproto.QueryResult _v1.UnmarshalBson(buf, kind) queryResultList.List = append(queryResultList.List, _v1) } } default: bson.Skip(buf, kind) } } }
// UnmarshalBson unmarshals BatchQueryShard from buf. func (bqs *BatchQueryShard) UnmarshalBson(buf *bytes.Buffer, kind byte) { bson.VerifyObject(kind) bson.Next(buf, 4) kind = bson.NextByte(buf) for kind != bson.EOO { keyName := bson.ReadCString(buf) switch keyName { case "Queries": bqs.Queries = tproto.DecodeQueriesBson(buf, kind) case "Keyspace": bqs.Keyspace = bson.DecodeString(buf, kind) case "Shards": bqs.Shards = bson.DecodeStringArray(buf, kind) case "TabletType": bqs.TabletType = topo.TabletType(bson.DecodeString(buf, kind)) case "Session": if kind != bson.Null { bqs.Session = new(Session) bqs.Session.UnmarshalBson(buf, kind) } default: bson.Skip(buf, kind) } kind = bson.NextByte(buf) } }
// UnmarshalBson bson-decodes into BlpPositionList. func (blpPositionList *BlpPositionList) UnmarshalBson(buf *bytes.Buffer, kind byte) { switch kind { case bson.EOO, bson.Object: // valid case bson.Null: return default: panic(bson.NewBsonError("unexpected kind %v for BlpPositionList", kind)) } bson.Next(buf, 4) for kind := bson.NextByte(buf); kind != bson.EOO; kind = bson.NextByte(buf) { switch bson.ReadCString(buf) { case "Entries": // []BlpPosition if kind != bson.Null { if kind != bson.Array { panic(bson.NewBsonError("unexpected kind %v for blpPositionList.Entries", kind)) } bson.Next(buf, 4) blpPositionList.Entries = make([]BlpPosition, 0, 8) for kind := bson.NextByte(buf); kind != bson.EOO; kind = bson.NextByte(buf) { bson.SkipIndex(buf) var _v1 BlpPosition _v1.UnmarshalBson(buf, kind) blpPositionList.Entries = append(blpPositionList.Entries, _v1) } } default: bson.Skip(buf, kind) } } }
func decodeShardSessionsBson(buf *bytes.Buffer, kind byte) []*ShardSession { switch kind { case bson.Array: // valid case bson.Null: return nil default: panic(bson.NewBsonError("Unexpected data type %v for ShardSessions", kind)) } bson.Next(buf, 4) shardSessions := make([]*ShardSession, 0, 8) kind = bson.NextByte(buf) for kind != bson.EOO { if kind != bson.Object { panic(bson.NewBsonError("Unexpected data type %v for ShardSession", kind)) } bson.SkipIndex(buf) shardSession := new(ShardSession) shardSession.UnmarshalBson(buf, kind) shardSessions = append(shardSessions, shardSession) kind = bson.NextByte(buf) } return shardSessions }
// UnmarshalBson bson-decodes into BoundQuery. func (boundQuery *BoundQuery) UnmarshalBson(buf *bytes.Buffer, kind byte) { switch kind { case bson.EOO, bson.Object: // valid case bson.Null: return default: panic(bson.NewBsonError("unexpected kind %v for BoundQuery", kind)) } bson.Next(buf, 4) for kind := bson.NextByte(buf); kind != bson.EOO; kind = bson.NextByte(buf) { switch bson.ReadCString(buf) { case "Sql": boundQuery.Sql = bson.DecodeString(buf, kind) case "BindVariables": // map[string]interface{} if kind != bson.Null { if kind != bson.Object { panic(bson.NewBsonError("unexpected kind %v for boundQuery.BindVariables", kind)) } bson.Next(buf, 4) boundQuery.BindVariables = make(map[string]interface{}) for kind := bson.NextByte(buf); kind != bson.EOO; kind = bson.NextByte(buf) { _k := bson.ReadCString(buf) var _v1 interface{} _v1 = bson.DecodeInterface(buf, kind) boundQuery.BindVariables[_k] = _v1 } } default: bson.Skip(buf, kind) } } }
// UnmarshalBson bson-decodes into Statement. func (statement *Statement) UnmarshalBson(buf *bytes.Buffer, kind byte) { switch kind { case bson.EOO, bson.Object: // valid case bson.Null: return default: panic(bson.NewBsonError("unexpected kind %v for Statement", kind)) } bson.Next(buf, 4) for kind := bson.NextByte(buf); kind != bson.EOO; kind = bson.NextByte(buf) { switch bson.ReadCString(buf) { case "Category": statement.Category = bson.DecodeInt(buf, kind) case "Charset": // *mproto.Charset if kind != bson.Null { statement.Charset = new(mproto.Charset) (*statement.Charset).UnmarshalBson(buf, kind) } case "Sql": statement.Sql = bson.DecodeBinary(buf, kind) default: bson.Skip(buf, kind) } } }
func (sk *SrvKeyspace) UnmarshalBson(buf *bytes.Buffer) { bson.Next(buf, 4) kind := bson.NextByte(buf) for kind != bson.EOO { keyName := bson.ReadCString(buf) switch keyName { case "Partitions": sk.Partitions = DecodeKeyspacePartitionMap(buf, kind) case "Shards": sk.Shards = DecodeSrvShardArray(buf, kind) case "TabletTypes": sk.TabletTypes = DecodeTabletTypeArray(buf, kind) case "ShardingColumnName": sk.ShardingColumnName = bson.DecodeString(buf, kind) case "ShardingColumnType": sk.ShardingColumnType = key.KeyspaceIdType(bson.DecodeString(buf, kind)) case "ServedFrom": sk.ServedFrom = DecodeServedFrom(buf, kind) default: panic(bson.NewBsonError("Unrecognized tag %s", keyName)) } kind = bson.NextByte(buf) } }
func DecodeKeyspacePartitionMap(buf *bytes.Buffer, kind byte) map[TabletType]*KeyspacePartition { switch kind { case bson.Object: // valid case bson.Null: return nil default: panic(bson.NewBsonError("Unexpected data type %v for KeyspacePartition map", kind)) } bson.Next(buf, 4) values := make(map[TabletType]*KeyspacePartition) kind = bson.NextByte(buf) for kind != bson.EOO { if kind != bson.Object { panic(bson.NewBsonError("Unexpected data type %v for KeyspacePartition map", kind)) } key := bson.ReadCString(buf) value := &KeyspacePartition{} value.UnmarshalBson(buf) values[TabletType(key)] = value kind = bson.NextByte(buf) } return values }
// UnmarshalBson bson-decodes into GTIDField. func (gf *GTIDField) UnmarshalBson(buf *bytes.Buffer, kind byte) { switch kind { case bson.EOO, bson.Object: // valid case bson.Null: return default: panic(bson.NewBsonError("unexpected kind %v for GTIDField", kind)) } bson.Next(buf, 4) // We expect exactly zero or one fields in this bson object. kind = bson.NextByte(buf) if kind == bson.EOO { // The GTID was nil, nothing to do. return } // The field name is the MySQL flavor. flavor := bson.ReadCString(buf) value := bson.DecodeString(buf, kind) // Check for and consume the end byte. if kind = bson.NextByte(buf); kind != bson.EOO { panic(bson.NewBsonError("too many fields for GTIDField")) } // Parse the value. gtid, err := ParseGTID(flavor, value) if err != nil { panic(bson.NewBsonError("invalid value %v for GTIDField: %v", value, err)) } gf.Value = gtid }
func (ste *StreamEvent) UnmarshalBson(buf *bytes.Buffer) { bson.Next(buf, 4) kind := bson.NextByte(buf) for kind != bson.EOO { key := bson.ReadCString(buf) switch key { case "Category": ste.Category = bson.DecodeString(buf, kind) case "TableName": ste.TableName = bson.DecodeString(buf, kind) case "PKColNames": ste.PKColNames = bson.DecodeStringArray(buf, kind) case "PKValues": ste.PKValues = UnmarshalPKValuesBson(buf, kind) case "Sql": ste.Sql = bson.DecodeString(buf, kind) case "Timestamp": ste.Timestamp = bson.DecodeInt64(buf, kind) case "GroupId": ste.GroupId = bson.DecodeInt64(buf, kind) default: panic(bson.NewBsonError("Unrecognized tag %s", key)) } kind = bson.NextByte(buf) } }
func DecodeFieldsBson(buf *bytes.Buffer, kind byte) []Field { switch kind { case bson.Array: // valid case bson.Null: return nil default: panic(bson.NewBsonError("Unexpected data type %v for Query.Fields", kind)) } bson.Next(buf, 4) fields := make([]Field, 0, 8) kind = bson.NextByte(buf) for kind != bson.EOO { if kind != bson.Object { panic(bson.NewBsonError("Unexpected data type %v for Query.Field", kind)) } bson.SkipIndex(buf) var field Field UnmarshalFieldBson(&field, buf) fields = append(fields, field) kind = bson.NextByte(buf) } return fields }
func UnmarshalStatementsBson(buf *bytes.Buffer, kind byte) []Statement { switch kind { case bson.Array: // valid case bson.Null: return nil default: panic(bson.NewBsonError("Unexpected data type %v for BinlogTransaction.Statements", kind)) } bson.Next(buf, 4) statements := make([]Statement, 0, 8) kind = bson.NextByte(buf) for i := 0; kind != bson.EOO; i++ { if kind != bson.Object { panic(bson.NewBsonError("Unexpected data type %v for Query.Field", kind)) } bson.ExpectIndex(buf, i) var statement Statement statement.UnmarshalBson(buf) statements = append(statements, statement) kind = bson.NextByte(buf) } return statements }
// UnmarshalBson bson-decodes into SrvKeyspaceNames. func (srvKeyspaceNames *SrvKeyspaceNames) UnmarshalBson(buf *bytes.Buffer, kind byte) { switch kind { case bson.EOO, bson.Object: // valid case bson.Null: return default: panic(bson.NewBsonError("unexpected kind %v for SrvKeyspaceNames", kind)) } bson.Next(buf, 4) for kind := bson.NextByte(buf); kind != bson.EOO; kind = bson.NextByte(buf) { switch bson.ReadCString(buf) { case "Entries": // []string if kind != bson.Null { if kind != bson.Array { panic(bson.NewBsonError("unexpected kind %v for srvKeyspaceNames.Entries", kind)) } bson.Next(buf, 4) srvKeyspaceNames.Entries = make([]string, 0, 8) for kind := bson.NextByte(buf); kind != bson.EOO; kind = bson.NextByte(buf) { bson.SkipIndex(buf) var _v1 string _v1 = bson.DecodeString(buf, kind) srvKeyspaceNames.Entries = append(srvKeyspaceNames.Entries, _v1) } } default: bson.Skip(buf, kind) } } }
// UnmarshalBson bson-decodes into ReplicationPosition. func (rp *ReplicationPosition) UnmarshalBson(buf *bytes.Buffer, kind byte) { switch kind { case bson.EOO, bson.Object: // valid case bson.Null: return default: panic(bson.NewBsonError("unexpected kind %v for ReplicationPosition", kind)) } bson.Next(buf, 4) // We expect exactly zero or one fields in this bson object. kind = bson.NextByte(buf) if kind == bson.EOO { // The value was nil, nothing to do. return } // The field name is the MySQL flavor. flavor := bson.ReadCString(buf) value := bson.DecodeString(buf, kind) // Check for and consume the end byte. if kind = bson.NextByte(buf); kind != bson.EOO { panic(bson.NewBsonError("too many fields for ReplicationPosition")) } // Parse the value. var err error *rp, err = ParseReplicationPosition(flavor, value) if err != nil { panic(bson.NewBsonError("invalid value %#v for ReplicationPosition: %v", value, err)) } }
// UnmarshalBson bson-decodes into QueryResult. func (queryResult *QueryResult) UnmarshalBson(buf *bytes.Buffer, kind byte) { switch kind { case bson.EOO, bson.Object: // valid case bson.Null: return default: panic(bson.NewBsonError("unexpected kind %v for QueryResult", kind)) } bson.Next(buf, 4) for kind := bson.NextByte(buf); kind != bson.EOO; kind = bson.NextByte(buf) { switch bson.ReadCString(buf) { case "Result": // *mproto.QueryResult if kind != bson.Null { queryResult.Result = new(mproto.QueryResult) (*queryResult.Result).UnmarshalBson(buf, kind) } case "Session": // *Session if kind != bson.Null { queryResult.Session = new(Session) (*queryResult.Session).UnmarshalBson(buf, kind) } case "Error": queryResult.Error = bson.DecodeString(buf, kind) default: bson.Skip(buf, kind) } } }