code: func newStream(streamID protocol.StreamID,
  	sender streamSender,
  	flowController flowcontrol.StreamFlowController,
  	version protocol.VersionNumber,
  ) *stream {
  	s := &stream{sender: sender, version: version}
  	senderForSendStream := &uniStreamSender{
  		streamSender: sender,
  		onStreamCompletedImpl: func() {
  			s.completedMutex.Lock()
  			s.sendStreamCompleted = true
  			s.checkIfCompleted()
  			s.completedMutex.Unlock()
  		},
  	}
  	s.sendStream = *newSendStream(streamID, senderForSendStream, flowController, version)
  	senderForReceiveStream := &uniStreamSender{
  		streamSender: sender,
  		onStreamCompletedImpl: func() {
  			s.completedMutex.Lock()
  			s.receiveStreamCompleted = true
  			s.checkIfCompleted()
  			s.completedMutex.Unlock()
  		},
  	}
  	s.receiveStream = *newReceiveStream(streamID, senderForReceiveStream, flowController, version)
  	return s
  }
docs: // newStream creates a new Stream