module Async::HTTP::Protocol::HTTP2

def self.bidirectional?

@returns [Boolean] Whether the protocol supports bidirectional communication.
def self.bidirectional?
	true
end

def self.client(peer, settings: CLIENT_SETTINGS)

@parameter options [Hash] Options to pass to the client instance.
@parameter peer [IO] The peer to communicate with.

Create a client for an outbound connection.
def self.client(peer, settings: CLIENT_SETTINGS)
	stream = ::IO::Stream(peer)
	client = Client.new(stream)
	
	client.send_connection_preface(settings)
	client.start_connection
	
	return client
end

def self.names

@returns [Array] The names of the supported protocol.
def self.names
	["h2"]
end

def self.server(peer, settings: SERVER_SETTINGS)

@parameter options [Hash] Options to pass to the server instance.
@parameter peer [IO] The peer to communicate with.

Create a server for an inbound connection.
def self.server(peer, settings: SERVER_SETTINGS)
	stream = ::IO::Stream(peer)
	server = Server.new(stream)
	
	server.read_connection_preface(settings)
	server.start_connection
	
	return server
end

def self.trailer?

@returns [Boolean] Whether the protocol supports trailers.
def self.trailer?
	true
end