// serialize serializes a message. It returns an error if serialization // failed, or if the message was too big to serialize based on the current // msgSize. The config lock is held during serialize. func (fs *FileServer) serialize(m qp.Message) ([]byte, error) { var ( mt qp.MessageType err error ) if mt, err = fs.proto.MessageType(m); err != nil { return nil, err } l := m.EncodedSize() + qp.HeaderSize if l > int(fs.msgSize) { return nil, errMsgTooBig } b := make([]byte, l) if err = m.Marshal(b[qp.HeaderSize:]); err != nil { return nil, err } binary.LittleEndian.PutUint32(b[0:4], uint32(l)) b[4] = byte(mt) return b, nil }