code: func (w *WebSockWrapper) Read(out []byte) (n int, err error) {
  	var data []byte
  
  	if w.mode == WebSocketBinaryMode {
  		err = websocket.Message.Receive(w.ws, &data)
  	} else {
  		var utf8 string
  		err = websocket.Message.Receive(w.ws, &utf8)
  		switch err {
  		case nil:
  			data, err = w.decoder.Bytes([]byte(utf8))
  		case io.EOF:
  			return 0, io.EOF
  		default:
  			log.Error(err)
  		}
  	}
  	if err != nil {
  		return 0, trace.Wrap(err)
  	}
  	if len(out) < len(data) {
  		log.Warningf("websocket failed to receive everything: %d vs %d", len(out), len(data))
  	}
  	return copy(out, data), nil
  }
docs: // Read does the opposite of write: it replaces websocket's raw "Read" with
  //
  // It replaces raw Read() with "Message.Receive()"