request

package
v0.11.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 27, 2024 License: MIT Imports: 23 Imported by: 11

Documentation

Index

Examples

Constants

This section is empty.

Variables

This section is empty.

Functions

func HandleErrors

func HandleErrors(handlers ...func(err error)) router.MiddlewareFunc

func Register added in v0.8.0

func Register(ctx context.Context) error

func Run

func Run(requestHttp *http.Request, requestStruct any) error

func Validate

func Validate(request *http.Request, v any) error

Types

type Converter added in v0.10.3

type Converter func(string) reflect.Value

type HTMLError added in v0.8.0

type HTMLError interface {
	HTMLError() string
}

type HTMLResponse

type HTMLResponse struct {
	Response
}

func NewHTMLResponse

func NewHTMLResponse(data []byte) *HTMLResponse

type HTTPError

type HTTPError struct {
	// contains filtered or unexported fields
}

func NewHTTPError

func NewHTTPError(err error, status int) *HTTPError

func (*HTTPError) Error

func (e *HTTPError) Error() string

func (*HTTPError) Respond

func (e *HTTPError) Respond(w http.ResponseWriter, r *http.Request) error

func (*HTTPError) Unwrap added in v0.8.0

func (e *HTTPError) Unwrap() error

type JSONResponse

type JSONResponse struct {
	// contains filtered or unexported fields
}

func NewJSONResponse

func NewJSONResponse(data any) *JSONResponse

func (*JSONResponse) AddHeader

func (r *JSONResponse) AddHeader(key, value string) *JSONResponse

func (*JSONResponse) Respond

func (r *JSONResponse) Respond(w http.ResponseWriter, _ *http.Request) error

func (*JSONResponse) SetStatus

func (r *JSONResponse) SetStatus(status int) *JSONResponse

type Message

type Message struct {
	Array   string `json:"array"`
	String  string `json:"string"`
	Numeric string `json:"numeric"`
}

func (*Message) UnmarshalJSON

func (m *Message) UnmarshalJSON(b []byte) error

type MessageOptions

type MessageOptions struct {
	Attribute string
	Value     any
	Arguments []string
}

type RequestHandler

type RequestHandler[TRequest, TResponse any] struct {
	// contains filtered or unexported fields
}

func Handler

func Handler[TRequest, TResponse any](callback func(r *TRequest) (TResponse, error)) *RequestHandler[TRequest, TResponse]

Handler is a helper to create http handlers with built in input validation and error handling.

type Request struct {
	Foo string `path:"foo" validate:"required"`
	Bar string `query:"bar"`
	Baz string `json:"baz"`
}
type Response struct{}
request.Handler(func(r *Request) (*Response, error) {
	return nil, nil
})
Example (Error)
package main

import (
	"fmt"
	"net/http"
	"net/http/httptest"

	"github.com/abibby/salusa/request"
)

func main() {
	type ExampleRequest struct {
		A int `query:"a" validate:"min:1"`
	}
	type ExampleResponse struct {
	}

	h := request.Handler(func(r *ExampleRequest) (*ExampleResponse, error) {
		return &ExampleResponse{}, nil
	})

	rw := httptest.NewRecorder()

	h.ServeHTTP(
		rw,
		httptest.NewRequest("GET", "/?a=-1", http.NoBody),
	)

	fmt.Println(rw.Result().StatusCode)
}
Output:

422
Example (Input)
package main

import (
	"fmt"
	"net/http"
	"net/http/httptest"

	"github.com/abibby/salusa/request"
)

func main() {
	type ExampleRequest struct {
		A int `query:"a"`
		B int `query:"b"`
	}
	type ExampleResponse struct {
		Sum int `json:"sum"`
	}
	h := request.Handler(func(r *ExampleRequest) (*ExampleResponse, error) {
		return &ExampleResponse{
			Sum: r.A + r.B,
		}, nil
	})

	rw := httptest.NewRecorder()

	h.ServeHTTP(
		rw,
		httptest.NewRequest("GET", "/?a=10&b=5", http.NoBody),
	)

	fmt.Println(rw.Body)
}
Output:

{
    "sum": 15
}
Example (PathParams)
package main

import (
	"fmt"
	"net/http"
	"net/http/httptest"

	"github.com/abibby/salusa/request"
	"github.com/gorilla/mux"
)

func main() {
	type ExampleRequest struct {
		A string `path:"a"`
		B string `path:"b"`
	}
	r := mux.NewRouter()
	r.Handle("/{a}/{b}", request.Handler(func(r *ExampleRequest) (*ExampleRequest, error) {
		return r, nil
	}))

	rw := httptest.NewRecorder()

	r.ServeHTTP(
		rw,
		httptest.NewRequest("GET", "/path_param_a/path_param_b", http.NoBody),
	)

	fmt.Println(rw.Body)
}
Output:

{
    "A": "path_param_a",
    "B": "path_param_b"
}

func (*RequestHandler[TRequest, TResponse]) Run added in v0.8.0

func (h *RequestHandler[TRequest, TResponse]) Run(r *TRequest) (TResponse, error)

func (*RequestHandler[TRequest, TResponse]) ServeHTTP

func (h *RequestHandler[TRequest, TResponse]) ServeHTTP(w http.ResponseWriter, r *http.Request)

func (*RequestHandler[TRequest, TResponse]) Validate added in v0.11.0

func (r *RequestHandler[TRequest, TResponse]) Validate(ctx context.Context) error

type Responder

type Responder interface {
	Respond(w http.ResponseWriter, r *http.Request) error
}

type Response

type Response struct {
	// contains filtered or unexported fields
}

func NewResponse

func NewResponse(body io.Reader) *Response

func (*Response) AddHeader

func (r *Response) AddHeader(key, value string) *Response

func (*Response) Headers added in v0.8.0

func (r *Response) Headers() map[string]string

func (*Response) Respond

func (r *Response) Respond(w http.ResponseWriter, _ *http.Request) error

func (*Response) SetStatus

func (r *Response) SetStatus(status int) *Response

func (*Response) Status added in v0.8.0

func (r *Response) Status() int

type ValidationError

type ValidationError map[string][]string

func (ValidationError) AddError

func (e ValidationError) AddError(key string, message string)

func (ValidationError) Error

func (e ValidationError) Error() string

func (ValidationError) HTMLError added in v0.8.0

func (e ValidationError) HTMLError() string

func (ValidationError) HasErrors

func (e ValidationError) HasErrors() bool

func (ValidationError) Merge

func (e ValidationError) Merge(vErr ValidationError)

type Validator

type Validator interface {
	Valid() error
}

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL