Documentation ¶
Index ¶
- type BodyReader
- type Fragment
- type Params
- type Path
- type Request
- func (r *Request) Body() ([]byte, error)
- func (r *Request) Clear() (err error)
- func (r *Request) HasBody() bool
- func (r *Request) Hijack() (net.Conn, error)
- func (r *Request) OnBody(onBody onBodyCallback, onComplete onCompleteCallback) error
- func (r *Request) Reader() io.Reader
- func (r *Request) WasHijacked() bool
- type Response
- func (r Response) Attachment() types.Attachment
- func (r Response) Clear() Response
- func (r Response) DiscardHeaders() Response
- func (r Response) Headers() []string
- func (r Response) WithAttachment(reader io.Reader, size int) Response
- func (r Response) WithBody(body string) Response
- func (r Response) WithBodyByte(body []byte) Response
- func (r Response) WithCode(code status.Code) Response
- func (r Response) WithContentType(value string) Response
- func (r Response) WithError(err error) Response
- func (r Response) WithFile(path string) (Response, error)
- func (r Response) WithHeader(key string, values ...string) Response
- func (r Response) WithHeaders(headers map[string][]string) Response
- func (r Response) WithStatus(status status.Status) Response
- func (r Response) WithTransferEncoding(value string) Response
- func (r Response) WithWriter(cb func(io.Writer) error) (Response, error)
- type ResponseWriter
- type TransferEncoding
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type BodyReader ¶
type Request ¶
type Request struct { Method method.Method Path Path Proto proto.Proto Remote net.Addr Headers *headers.Headers Upgrade proto.Proto ContentLength int TransferEncoding TransferEncoding Ctx context.Context // contains filtered or unexported fields }
Request struct represents http request About headers manager see at http/headers/headers.go:Manager Headers attribute references at that one that lays in manager
func NewRequest ¶
func NewRequest( hdrs *headers.Headers, query query.Query, response Response, conn net.Conn, body BodyReader, paramsMap Params, disableParamsMapClearing bool, ) *Request
NewRequest returns a new instance of request object and body gateway Must not be used externally, this function is for internal purposes only HTTP/1.1 as a protocol by default is set because if first request from user is invalid, we need to render a response using request method, but appears that default method is a null-value (proto.Unknown)
func (*Request) Body ¶
Body is a high-level function that wraps OnBody, and the only it does is reading pieces of body into the buffer that is a nil by default, but may grow and will stay as big as it grew until the disconnect
func (*Request) Clear ¶
Clear resets request headers and reads body into nowhere until completed. It is implemented to clear the request object between requests
func (*Request) HasBody ¶
HasBody returns not actual "whether request contains a body", but a possibility. So result only depends on whether content-length is more than 0, or chunked transfer encoding is enabled
func (*Request) Hijack ¶
Hijack the connection. Request body will be implicitly read (so if you need it you should read it before) all the body left. After handler exits, the connection will be closed, so the connection can be hijacked only once
func (*Request) OnBody ¶
OnBody is a low-level interface accessing a request body. It takes onBody callback that is being called every time a piece of body is read (note: even a single byte can be passed). In case error returned, it'll be returned from OnBody method. In case onBody never did return an error, onComplete will be called when the body will be finished. This callback also can return an error that'll be returned from OnBody method - for example, in case body's hash sum is invalid
func (*Request) Reader ¶
Reader returns io.Reader for request body. This method may be called multiple times, but reading from multiple readers leads to Undefined Behaviour
func (*Request) WasHijacked ¶
WasHijacked returns true or false, depending on whether was a connection hijacked
type Response ¶
type Response struct { Code status.Code // Status is empty by default, in this case renderer must put a default one Status status.Status // ContentType, as a special for core header, should be treated individually ContentType string // The same is about TransferEncoding TransferEncoding string Body []byte // contains filtered or unexported fields }
func NewResponse ¶
func NewResponse() Response
func (Response) Attachment ¶ added in v0.5.0
func (r Response) Attachment() types.Attachment
Attachment returns response's attachment.
WARNING: do NEVER use this method in your code. It serves internal purposes ONLY
func (Response) DiscardHeaders ¶
DiscardHeaders returns response object with no any headers set.
Warning: this action is not pure. Appending new headers will cause overriding old ones
func (Response) WithAttachment ¶ added in v0.5.0
WithAttachment sets a response's attachment. In this case response body will be ignored. If size <= 0, then Transfer-Encoding: chunked will be used
func (Response) WithBody ¶
WithBody sets a string as a response body. This will override already-existing body if it was set
func (Response) WithBodyByte ¶
WithBodyByte does all the same as Body does, but for byte slices
func (Response) WithCode ¶
WithCode sets a response code and a corresponding status. In case of unknown code, "Unknown Status Code" will be set as a status code. In this case you should call Status explicitly
func (Response) WithContentType ¶ added in v0.5.0
WithContentType sets a custom Content-Type header value.
func (Response) WithError ¶
WithError tries to set a corresponding status code and response body equal to error text if error is known to server, otherwise setting status code to status.InternalServerError without setting a response body to the error text, because this possibly may reveal some sensitive internal infrastructure details
func (Response) WithFile ¶
WithFile opens a file for reading, and returns a new response with attachment corresponding to the file FD. In case not found or any other error, it'll be directly returned. In case error occurred while opening the file, response builder won't be affected and stay clean
func (Response) WithHeader ¶
WithHeader sets header values to a key. In case it already exists the value will be appended.
func (Response) WithHeaders ¶
WithHeaders simply merges passed headers into response. Also, it is the only way to specify a quality marker of value. In case headers were not initialized before, response headers will be set to a passed map, so editing this map will affect response
func (Response) WithStatus ¶
WithStatus sets a custom status text. This text does not matter at all, and usually totally ignored by client, so there is actually no reasons to use this except some rare cases when you need to represent a response status text somewhere
func (Response) WithTransferEncoding ¶ added in v0.5.0
WithTransferEncoding sets a custom Transfer-Encoding header value.
func (Response) WithWriter ¶
WithWriter takes a function that takes an io.Writer, which allows us to stream data directly into the response body. Note: this method causes an allocation
TODO: This is not the best design solution. I would like to make this method just like
all others, so returning only Response object itself. The problem is that it is impossible because io.Writer is a procedure-style thing that does not work with our builder that pretends to be clear. Hope in future this issue will be solved
type ResponseWriter ¶
type TransferEncoding ¶ added in v0.6.0
type TransferEncoding struct {
Chunked, HasTrailer bool
}