package libp2pwebtransport

import (
	
	

	

	
)

const (
	reset webtransport.StreamErrorCode = 0
)

type webtransportStream struct {
	webtransport.Stream
	wsess *webtransport.Session
}

var _ net.Conn = &webtransportStream{}

func ( *webtransportStream) () net.Addr {
	return .wsess.LocalAddr()
}

func ( *webtransportStream) () net.Addr {
	return .wsess.RemoteAddr()
}

type stream struct {
	webtransport.Stream
}

var _ network.MuxedStream = &stream{}

func ( *stream) ( []byte) ( int,  error) {
	,  = .Stream.Read()
	if  != nil {
		var  *webtransport.StreamError
		if errors.As(, &) {
			 = &network.StreamError{
				ErrorCode:      0,
				Remote:         .Remote,
				TransportError: ,
			}
		}
	}
	return , 
}

func ( *stream) ( []byte) ( int,  error) {
	,  = .Stream.Write()
	if  != nil {
		var  *webtransport.StreamError
		if errors.As(, &) {
			 = &network.StreamError{
				ErrorCode:      0,
				Remote:         .Remote,
				TransportError: ,
			}
		}
	}
	return , 
}

func ( *stream) () error {
	.Stream.CancelRead(reset)
	.Stream.CancelWrite(reset)
	return nil
}

// ResetWithError resets the stream ignoring the error code. Error codes aren't
// specified for WebTransport as the current implementation of WebTransport in
// browsers(https://www.ietf.org/archive/id/draft-kinnear-webtransport-http2-02.html)
// only supports 1 byte error codes. For more details, see
// https://github.com/libp2p/specs/blob/4eca305185c7aef219e936bef76c48b1ab0a8b43/error-codes/README.md?plain=1#L84
func ( *stream) ( network.StreamErrorCode) error {
	.Stream.CancelRead(reset)
	.Stream.CancelWrite(reset)
	return nil
}

func ( *stream) () error {
	.Stream.CancelRead(reset)
	return .Stream.Close()
}

func ( *stream) () error {
	.Stream.CancelRead(reset)
	return nil
}

func ( *stream) () error {
	return .Stream.Close()
}