func (db *Database) readIdentifiable(r *rw.Reader) (orient.OIdentifiable, error) { classId := r.ReadShort() if err := r.Err(); err != nil { return nil, err } switch classId { case RecordNull: return nil, nil case RecordRID: var rid orient.RID if err := rid.FromStream(r); err != nil { return nil, err } return rid, nil default: tp := orient.RecordType(r.ReadByte()) if err := r.Err(); err != nil { return nil, err } record := orient.NewRecordOfType(tp) switch rec := record.(type) { case *orient.Document: rec.SetSerializer(db.sess.cli.recordFormat) } var rid orient.RID if err := rid.FromStream(r); err != nil { return nil, err } version := int(r.ReadInt()) content := r.ReadBytes() if err := record.Fill(rid, version, content); err != nil { return nil, fmt.Errorf("cannot create record %T from content: %s", record, err) } return record, nil } }