request

package
v0.11.2 Latest Latest
Warning

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

Go to latest
Published: Jun 19, 2024 License: MIT Imports: 28 Imported by: 18

Documentation

Index

Examples

Constants

View Source
const (
	KB = 1000
	MB = 1000 * KB
	GB = 1000 * MB
	TB = 1000 * GB
	PB = 1000 * TB

	KiB = 1024
	MiB = 1024 * KiB
	GiB = 1024 * MiB
	TiB = 1024 * GiB
	PiB = 1024 * TiB
)

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 RunRW added in v0.11.2

func RunRW(requestHttp *http.Request, responseHttp http.ResponseWriter, 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 File added in v0.11.2

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

func (*File) Close added in v0.11.2

func (f *File) Close() error

Close implements fs.File.

func (*File) Read added in v0.11.2

func (f *File) Read(b []byte) (int, error)

Read implements fs.File.

func (*File) Stat added in v0.11.2

func (f *File) Stat() (fs.FileInfo, error)

Stat implements fs.File.

type FileInfo added in v0.11.2

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

func (*FileInfo) IsDir added in v0.11.2

func (f *FileInfo) IsDir() bool

IsDir implements fs.FileInfo.

func (*FileInfo) ModTime added in v0.11.2

func (f *FileInfo) ModTime() time.Time

ModTime implements fs.FileInfo.

func (*FileInfo) Mode added in v0.11.2

func (f *FileInfo) Mode() fs.FileMode

Mode implements fs.FileInfo.

func (*FileInfo) Name added in v0.11.2

func (f *FileInfo) Name() string

Name implements fs.FileInfo.

func (*FileInfo) Size added in v0.11.2

func (f *FileInfo) Size() int64

Size implements fs.FileInfo.

func (*FileInfo) Sys added in v0.11.2

func (f *FileInfo) Sys() any

Sys implements fs.FileInfo.

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

func (*HTTPError) WithStack added in v0.11.2

func (e *HTTPError) WithStack() *HTTPError

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]
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 StackFrame added in v0.11.2

type StackFrame struct {
	Call  string `json:"call"`
	File  string `json:"file"`
	Line  int    `json:"line"`
	Extra int    `json:"-"`
}

type StackTrace added in v0.11.2

type StackTrace struct {
	GoRoutine string        `json:"go_routine"`
	Stack     []*StackFrame `json:"stack"`
}

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