public bool TryParseElement(BsonDocument parent, out BsonElement element) { element = default; if (!TryGetByte(out var type)) { return(false); } if (!TryGetCString(out var name)) { return(false); } switch (type) { case 1: { if (!TryGetDouble(out var doubleVal)) { return(false); } element = BsonElement.Create(parent, name, doubleVal); return(true); } case 2: { if (!TryGetString(out var stringValue)) { return(false); } element = BsonElement.Create(parent, name, stringValue); return(true); } case 3: { if (!TryParseDocument(parent, out var docValue)) { return(false); } element = BsonElement.Create(parent, name, docValue); return(true); } case 4: { if (!TryGetArray(out var arrayDoc)) { return(false); } element = BsonElement.CreateArray(parent, name, arrayDoc); return(true); } case 5: { if (!TryGetBinaryData(out var binary)) { return(false); } element = BsonElement.Create(parent, name, binary); return(true); } case 7: { if (!TryGetObjectId(out var objectId)) { return(false); } element = BsonElement.Create(parent, name, objectId); return(true); } case 8: { if (!TryGetBoolean(out var boolValue)) { return(false); } element = BsonElement.Create(parent, name, boolValue); return(true); } case 9: { if (!TryGetUtcDatetime(out var datetime)) { return(false); } element = BsonElement.Create(parent, name, datetime); return(true); } case 10: { element = BsonElement.Create(parent, name); return(true); } case 16: { if (!TryGetInt32(out var intValue)) { return(false); } element = BsonElement.Create(parent, name, intValue); return(true); } case 17: { if (!TryGetInt64(out var timestampValue)) { return(false); } element = BsonElement.Create(parent, name, new BsonTimestamp(timestampValue)); return(true); } case 18: { if (!TryGetInt64(out var longValue)) { return(false); } element = BsonElement.Create(parent, name, longValue); return(true); } default: { return(ThrowHelper.UnknownTypeException <bool>(type)); } } }