Documentation
¶
Index ¶
- Constants
- func Validator() *validator.Validate
- type APIKeyAuthConfig
- type APIKeyAuthHandlerFunc
- type APIKeyAuthType
- func (t APIKeyAuthType[AuthModel]) GetDescription() string
- func (t APIKeyAuthType[AuthModel]) GetFieldName() string
- func (t APIKeyAuthType[AuthModel]) GetFormat() string
- func (t APIKeyAuthType[AuthModel]) GetHandler() AuthHandlerFunc[AuthModel]
- func (t APIKeyAuthType[AuthModel]) GetIn() oapi.In
- func (t APIKeyAuthType[AuthModel]) GetName() string
- func (t APIKeyAuthType[AuthModel]) GetType() openapiModels.AuthType
- type Application
- type AuthHandler
- func APIKeyAuth[AuthModel any](handler APIKeyAuthHandlerFunc[AuthModel], config APIKeyAuthConfig) AuthHandler[AuthModel]
- func BasicAuth[AuthModel any](handler BasicAuthHandlerFunc[AuthModel], config BasicAuthConfig) AuthHandler[AuthModel]
- func BearerAuth[AuthModel any](handler BearerAuthHandlerFunc[AuthModel], config BearerAuthConfig) AuthHandler[AuthModel]
- func SessionCookieAuth[AuthModel any](handler SessionCookieAuthHandlerFunc[AuthModel], ...) AuthHandler[AuthModel]
- type AuthHandlerFunc
- type AuthWebSocketCallbackHandlerFunc
- type AuthWebSocketCallbacks
- type AuthenticatedJsonHandlerFunc
- type AuthenticatedMultipartHandlerFunc
- type AuthenticatedRawBodyHandlerFunc
- type BasicAuthConfig
- type BasicAuthHandlerFunc
- type BasicAuthType
- func (t BasicAuthType[AuthModel]) GetDescription() string
- func (t BasicAuthType[AuthModel]) GetFieldName() string
- func (t BasicAuthType[AuthModel]) GetFormat() string
- func (t BasicAuthType[AuthModel]) GetHandler() AuthHandlerFunc[AuthModel]
- func (t BasicAuthType[AuthModel]) GetIn() oapi.In
- func (t BasicAuthType[AuthModel]) GetName() string
- func (t BasicAuthType[AuthModel]) GetType() openapiModels.AuthType
- type BearerAuthConfig
- type BearerAuthHandlerFunc
- type BearerAuthType
- func (t BearerAuthType[AuthModel]) GetDescription() string
- func (t BearerAuthType[AuthModel]) GetFieldName() string
- func (t BearerAuthType[AuthModel]) GetFormat() string
- func (t BearerAuthType[AuthModel]) GetHandler() AuthHandlerFunc[AuthModel]
- func (t BearerAuthType[AuthModel]) GetIn() oapi.In
- func (t BearerAuthType[AuthModel]) GetName() string
- func (t BearerAuthType[AuthModel]) GetType() openapiModels.AuthType
- type Handler
- func AuthJsonHandler[RequestBody, Params, AuthModel, ResponseBody any](...) Handler
- func AuthMultipartHandler[Params, AuthModel, ResponseBody any](...) Handler
- func AuthRawBodyHandler[Params, AuthModel, ResponseBody any](...) Handler
- func AuthWebSocketHandler[Params, AuthModel any](callbacks AuthWebSocketCallbacks[Params, AuthModel], ...) Handler
- func AuthWebSocketHandlerFunc[Params, AuthModel any](callbacksFunc func() AuthWebSocketCallbacks[Params, AuthModel], ...) Handler
- func JsonHandler[RequestBody, Params, ResponseBody any](h JsonHandlerFunc[RequestBody, Params, ResponseBody]) Handler
- func MultipartHandler[Params any, ResponseBody any](h MultipartHandlerFunc[Params, ResponseBody]) Handler
- func RawBodyHandler[Params, ResponseBody any](h RawBodyHandlerFunc[Params, ResponseBody]) Handler
- func WebSocketHandler[Params any](callbacks WebSocketCallbacks[Params]) Handler
- func WebSocketHandlerFunc[Params any](callbacksFunc func() WebSocketCallbacks[Params]) Handler
- type JsonHandlerFunc
- type MultipartHandlerFunc
- type RawBodyHandlerFunc
- type Router
- func (r *Router) DELETE(path string, handler Handler)
- func (r *Router) DELETEWithMiddleware(path string, handler Handler, middleware ...func(http.Handler) http.Handler)
- func (r *Router) Extend(middleware []func(http.Handler) http.Handler)
- func (r *Router) GET(path string, handler Handler)
- func (r *Router) GETWithMiddleware(path string, handler Handler, middleware ...func(http.Handler) http.Handler)
- func (r *Router) GenerateOpenAPIDocumentation(ctx context.Context, title, version string) error
- func (r *Router) HEAD(path string, handler Handler)
- func (r *Router) HEADWithMiddleware(path string, handler Handler, middleware ...func(http.Handler) http.Handler)
- func (r *Router) Handle(method, path string, handler Handler)
- func (r *Router) OPTIONS(path string, handler Handler)
- func (r *Router) OPTIONSWithMiddleware(path string, handler Handler, middleware ...func(http.Handler) http.Handler)
- func (r *Router) PATCH(path string, handler Handler)
- func (r *Router) PATCHWithMiddleware(path string, handler Handler, middleware ...func(http.Handler) http.Handler)
- func (r *Router) POST(path string, handler Handler)
- func (r *Router) POSTWithMiddleware(path string, handler Handler, middleware ...func(http.Handler) http.Handler)
- func (r *Router) PUT(path string, handler Handler)
- func (r *Router) PUTWithMiddleware(path string, handler Handler, middleware ...func(http.Handler) http.Handler)
- func (r *Router) ServeHTTP(w http.ResponseWriter, req *http.Request)
- func (r *Router) Use(middleware func(http.Handler) http.Handler)
- func (r *Router) WithMiddleware(method, path string, handler Handler, ...)
- type SessionCookieAuthConfig
- type SessionCookieAuthHandlerFunc
- type SessionCookieAuthType
- func (t SessionCookieAuthType[AuthModel]) GetDescription() string
- func (t SessionCookieAuthType[AuthModel]) GetFieldName() string
- func (t SessionCookieAuthType[AuthModel]) GetFormat() string
- func (t SessionCookieAuthType[AuthModel]) GetHandler() AuthHandlerFunc[AuthModel]
- func (t SessionCookieAuthType[AuthModel]) GetIn() oapi.In
- func (t SessionCookieAuthType[AuthModel]) GetName() string
- func (t SessionCookieAuthType[AuthModel]) GetType() openapiModels.AuthType
- type ValidationError
- type WebSocketCallbackHandlerFunc
- type WebSocketCallbacks
- type WebSocketConnection
Constants ¶
const ( AuthHeader = "Authorization" BasicPrefix = "Basic " BearerPrefix = "Bearer " )
Header constants for authentication and authorization
const (
)
Public error messages for common errors
Variables ¶
This section is empty.
Functions ¶
Types ¶
type APIKeyAuthConfig ¶ added in v0.13.0
type APIKeyAuthHandlerFunc ¶ added in v0.16.0
type APIKeyAuthHandlerFunc[AuthModel any] func(ctx context.Context, apiKey string) (AuthModel, error)
APIKeyAuthHandlerFunc is a function that handles API key authentication. This is the function that should be implemented by the user. It should return the user model if the API key is valid, otherwise it should return an error.
type APIKeyAuthType ¶ added in v0.13.0
type APIKeyAuthType[AuthModel any] struct { Name string FieldName string In oapi.In Description string Handler APIKeyAuthHandlerFunc[AuthModel] }
func (APIKeyAuthType[AuthModel]) GetDescription ¶ added in v0.13.0
func (t APIKeyAuthType[AuthModel]) GetDescription() string
func (APIKeyAuthType[AuthModel]) GetFieldName ¶ added in v0.13.0
func (t APIKeyAuthType[AuthModel]) GetFieldName() string
func (APIKeyAuthType[AuthModel]) GetFormat ¶ added in v0.13.0
func (t APIKeyAuthType[AuthModel]) GetFormat() string
func (APIKeyAuthType[AuthModel]) GetHandler ¶ added in v0.13.0
func (t APIKeyAuthType[AuthModel]) GetHandler() AuthHandlerFunc[AuthModel]
func (APIKeyAuthType[AuthModel]) GetIn ¶ added in v0.13.0
func (t APIKeyAuthType[AuthModel]) GetIn() oapi.In
func (APIKeyAuthType[AuthModel]) GetName ¶ added in v0.13.0
func (t APIKeyAuthType[AuthModel]) GetName() string
func (APIKeyAuthType[AuthModel]) GetType ¶ added in v0.13.0
func (t APIKeyAuthType[AuthModel]) GetType() openapiModels.AuthType
type Application ¶
type Application struct {
// ApplicationName is the name of the application
ApplicationName string `yaml:"application-name" env:"APPLICATION_NAME" default:"Simba Application"`
// ApplicationVersion is the version of the application
ApplicationVersion string `yaml:"application-version" env:"APPLICATION_VERSION" default:"0.1.0"`
// Server is the HTTP server for the application
Server *http.Server
// Router is the main Mux for the application
Router *Router
// Settings is the application Settings
Settings *settings.Simba
// contains filtered or unexported fields
}
Application is the main application struct that holds the Mux and other application Settings
func Default ¶
func Default(opts ...settings.Option) *Application
Default returns a new Application application with default Simba
func (*Application) Start ¶ added in v0.4.0
func (a *Application) Start()
func (*Application) Stop ¶ added in v0.4.0
func (a *Application) Stop() error
type AuthHandler ¶ added in v0.13.0
type AuthHandler[AuthModel any] interface { GetType() openapiModels.AuthType GetName() string GetFieldName() string GetFormat() string GetDescription() string GetIn() oapi.In GetHandler() AuthHandlerFunc[AuthModel] }
func APIKeyAuth ¶ added in v0.13.0
func APIKeyAuth[AuthModel any]( handler APIKeyAuthHandlerFunc[AuthModel], config APIKeyAuthConfig, ) AuthHandler[AuthModel]
APIKeyAuth creates an API key auth handler with configuration
func BasicAuth ¶ added in v0.13.0
func BasicAuth[AuthModel any]( handler BasicAuthHandlerFunc[AuthModel], config BasicAuthConfig, ) AuthHandler[AuthModel]
BasicAuth creates a basic auth handler with configuration
func BearerAuth ¶ added in v0.13.0
func BearerAuth[AuthModel any]( handler BearerAuthHandlerFunc[AuthModel], config BearerAuthConfig, ) AuthHandler[AuthModel]
BearerAuth creates a bearer auth handler with configuration
func SessionCookieAuth ¶ added in v0.18.0
func SessionCookieAuth[AuthModel any]( handler SessionCookieAuthHandlerFunc[AuthModel], config SessionCookieAuthConfig[AuthModel], ) AuthHandler[AuthModel]
SessionCookieAuth creates a session cookie auth handler with configuration
type AuthHandlerFunc ¶ added in v0.3.0
AuthHandlerFunc is a function that handles authentication for a route.
type AuthWebSocketCallbackHandlerFunc ¶
type AuthWebSocketCallbackHandlerFunc[Params, AuthModel any] struct { // contains filtered or unexported fields }
AuthWebSocketCallbackHandlerFunc is a function type for handling authenticated WebSocket connections with callbacks
func (*AuthWebSocketCallbackHandlerFunc[Params, AuthModel]) ServeHTTP ¶
func (h *AuthWebSocketCallbackHandlerFunc[Params, AuthModel]) ServeHTTP(w http.ResponseWriter, r *http.Request)
ServeHTTP implements the http.Handler interface for AuthWebSocketCallbackHandlerFunc
type AuthWebSocketCallbacks ¶
type AuthWebSocketCallbacks[Params, AuthModel any] struct { // OnConnect is called after the WebSocket upgrade succeeds (optional) // The auth parameter contains the authenticated user model // If an error is returned, the connection is closed and OnDisconnect is called OnConnect func(ctx context.Context, conn *WebSocketConnection, connections map[string]*WebSocketConnection, params Params, auth AuthModel) error // OnMessage is called for each incoming message from the client (required) // The messageType indicates if this is text (ws.OpText) or binary (ws.OpBinary) // The auth parameter contains the authenticated user model // If an error is returned, OnError is called (if provided), otherwise connection closes OnMessage func(ctx context.Context, conn *WebSocketConnection, connections map[string]*WebSocketConnection, messageType ws.OpCode, data []byte, auth AuthModel) error // OnDisconnect is called when the connection is closed (optional) // This is ALWAYS called, even if OnConnect or OnMessage returns an error // The err parameter contains the error that caused disconnection (nil for clean close) // This is guaranteed to run via defer, making it perfect for cleanup OnDisconnect func(ctx context.Context, params Params, auth AuthModel, err error) // OnError is called when an error occurs during OnConnect or OnMessage (optional) // Return true to continue processing messages, false to close the connection // If not provided, any error will close the connection OnError func(ctx context.Context, conn *WebSocketConnection, err error) bool }
AuthWebSocketCallbacks defines the lifecycle callbacks for an authenticated WebSocket connection All callbacks are called sequentially for a single connection Multiple connections can have their callbacks called concurrently
type AuthenticatedJsonHandlerFunc ¶ added in v0.6.0
type AuthenticatedJsonHandlerFunc[RequestBody, Params, AuthModel, ResponseBody any] struct { // contains filtered or unexported fields }
AuthenticatedJsonHandlerFunc is a function type for handling authenticated routes with Request body and params
func (AuthenticatedJsonHandlerFunc[RequestBody, Params, AuthModel, ResponseBody]) ServeHTTP ¶ added in v0.6.0
func (h AuthenticatedJsonHandlerFunc[RequestBody, Params, AuthModel, ResponseBody]) ServeHTTP(w http.ResponseWriter, r *http.Request)
ServeHTTP implements the http.Handler interface for AuthenticatedJsonHandlerFunc
type AuthenticatedMultipartHandlerFunc ¶ added in v0.7.0
type AuthenticatedMultipartHandlerFunc[Params, AuthModel, ResponseBody any] struct { // contains filtered or unexported fields }
AuthenticatedMultipartHandlerFunc is a function type for handling a MultipartRequest with params and an authenticated model
func (AuthenticatedMultipartHandlerFunc[Params, AuthModel, ResponseBody]) ServeHTTP ¶ added in v0.7.0
func (h AuthenticatedMultipartHandlerFunc[Params, AuthModel, ResponseBody]) ServeHTTP(w http.ResponseWriter, r *http.Request)
type AuthenticatedRawBodyHandlerFunc ¶ added in v0.27.0
type AuthenticatedRawBodyHandlerFunc[Params, AuthModel, ResponseBody any] struct { // contains filtered or unexported fields }
AuthenticatedRawBodyHandlerFunc is a function type for handling authenticated routes with Request body and params
func (AuthenticatedRawBodyHandlerFunc[Params, AuthModel, ResponseBody]) ServeHTTP ¶ added in v0.27.0
func (h AuthenticatedRawBodyHandlerFunc[Params, AuthModel, ResponseBody]) ServeHTTP(w http.ResponseWriter, r *http.Request)
ServeHTTP implements the http.Handler interface for AuthenticatedRawBodyHandlerFunc
type BasicAuthConfig ¶ added in v0.13.0
type BasicAuthHandlerFunc ¶ added in v0.16.0
type BasicAuthHandlerFunc[AuthModel any] func(ctx context.Context, username, password string) (AuthModel, error)
BasicAuthHandlerFunc is a function that handles basic auth. This is the function that should be implemented by the user. It should return the user model if the username and password are valid, otherwise it should return an error.
type BasicAuthType ¶ added in v0.13.0
type BasicAuthType[AuthModel any] struct { Name string Description string Handler BasicAuthHandlerFunc[AuthModel] }
func (BasicAuthType[AuthModel]) GetDescription ¶ added in v0.13.0
func (t BasicAuthType[AuthModel]) GetDescription() string
func (BasicAuthType[AuthModel]) GetFieldName ¶ added in v0.13.0
func (t BasicAuthType[AuthModel]) GetFieldName() string
func (BasicAuthType[AuthModel]) GetFormat ¶ added in v0.13.0
func (t BasicAuthType[AuthModel]) GetFormat() string
func (BasicAuthType[AuthModel]) GetHandler ¶ added in v0.13.0
func (t BasicAuthType[AuthModel]) GetHandler() AuthHandlerFunc[AuthModel]
func (BasicAuthType[AuthModel]) GetIn ¶ added in v0.13.0
func (t BasicAuthType[AuthModel]) GetIn() oapi.In
func (BasicAuthType[AuthModel]) GetName ¶ added in v0.13.0
func (t BasicAuthType[AuthModel]) GetName() string
func (BasicAuthType[AuthModel]) GetType ¶ added in v0.13.0
func (t BasicAuthType[AuthModel]) GetType() openapiModels.AuthType
type BearerAuthConfig ¶ added in v0.13.0
type BearerAuthHandlerFunc ¶ added in v0.16.0
type BearerAuthHandlerFunc[AuthModel any] func(ctx context.Context, token string) (AuthModel, error)
BearerAuthHandlerFunc is a function that handles bearer token authentication. This is the function that should be implemented by the user. It should return the user model if the token is valid, otherwise it should return an error.
type BearerAuthType ¶ added in v0.13.0
type BearerAuthType[AuthModel any] struct { Name string Format string Description string Handler BearerAuthHandlerFunc[AuthModel] }
func (BearerAuthType[AuthModel]) GetDescription ¶ added in v0.13.0
func (t BearerAuthType[AuthModel]) GetDescription() string
func (BearerAuthType[AuthModel]) GetFieldName ¶ added in v0.13.0
func (t BearerAuthType[AuthModel]) GetFieldName() string
func (BearerAuthType[AuthModel]) GetFormat ¶ added in v0.13.0
func (t BearerAuthType[AuthModel]) GetFormat() string
func (BearerAuthType[AuthModel]) GetHandler ¶ added in v0.13.0
func (t BearerAuthType[AuthModel]) GetHandler() AuthHandlerFunc[AuthModel]
func (BearerAuthType[AuthModel]) GetIn ¶ added in v0.13.0
func (t BearerAuthType[AuthModel]) GetIn() oapi.In
func (BearerAuthType[AuthModel]) GetName ¶ added in v0.13.0
func (t BearerAuthType[AuthModel]) GetName() string
func (BearerAuthType[AuthModel]) GetType ¶ added in v0.13.0
func (t BearerAuthType[AuthModel]) GetType() openapiModels.AuthType
type Handler ¶
type Handler interface {
ServeHTTP(w http.ResponseWriter, r *http.Request)
// contains filtered or unexported methods
}
Handler specifies the interface for a handler that can be registered with the Router.
func AuthJsonHandler ¶ added in v0.6.0
func AuthJsonHandler[RequestBody, Params, AuthModel, ResponseBody any]( handler func(ctx context.Context, req *simbaModels.Request[RequestBody, Params], authModel AuthModel) (*simbaModels.Response[ResponseBody], error), authHandler AuthHandler[AuthModel], ) Handler
AuthJsonHandler handles a Request with the Request body and params.
Example usage:
Define a Request body struct:
type RequestBody struct {
Test string `json:"test" validate:"required"`
}
Define a Request params struct:
type Params struct {
Name string `header:"name" validate:"required"`
ID int `path:"id" validate:"required"`
Active bool `query:"active" validate:"required"`
Page int64 `query:"page" validate:"min=0"`
Size int64 `query:"size" validate:"min=0"`
}
Define a user struct:
type AuthModel struct {
ID int
Name string
Role string
}
Define a handler function:
func(ctx context.Context, req *simba.Request[RequestBody, Params], authModel AuthModel) (*simba.Response[map[string]string], error) {
// Access the Request body and params fields
req.Body.Test
req.Params.Name
req.Params.ID
req.Params.Page
req.Params.Size
// Access the user fields
user.ID
user.Name
user.Role
// Return a response
return &simba.Response[map[string]string]{
Headers: map[string][]string{"My-Header": {"header-value"}},
Cookies: []*http.Cookie{{Name: "My-Cookie", Value: "cookie-value"}},
Body: map[string]string{"message": "success"},
Status: http.StatusOK,
}, nil
}
Register the handler:
Mux.POST("/test/{id}", simba.AuthJsonHandler(handler))
func AuthMultipartHandler ¶ added in v0.7.0
func AuthMultipartHandler[Params, AuthModel, ResponseBody any]( handler func(ctx context.Context, req *simbaModels.MultipartRequest[Params], authModel AuthModel) (*simbaModels.Response[ResponseBody], error), authHandler AuthHandler[AuthModel], ) Handler
AuthMultipartHandler handles a MultipartRequest with params and an authenticated model. The MultipartRequest holds a MultipartReader and the parsed params. The reason to provide the reader is to allow the logic for processing the parts to be handled by the handler function.
Example usage:
Define a Request params struct:
type Params struct {
Name string `header:"name" validate:"required"`
ID int `path:"id" validate:"required"`
Active bool `query:"active" validate:"required"`
Page int64 `query:"page" validate:"min=0"`
Size int64 `query:"size" validate:"min=0"`
}
Define a user struct:
type AuthModel struct {
ID int
Name string
Role string
}
Define a handler function:
func(ctx context.Context, req *simba.MultipartRequest[Params], authModel AuthModel) (*simba.Response[map[string]string], error) {
// Access the Multipart reader and params fields
req.Params.Name
req.Params.ID
req.Params.Page
req.Params.Size
req.Reader // Multipart reader
// Access the user fields
user.ID
user.Name
user.Role
// Return a response
return &simba.Response[map[string]string]{
Headers: map[string][]string{"My-Header": {"header-value"}},
Cookies: []*http.Cookie{{Name: "My-Cookie", Value: "cookie-value"}},
Body: map[string]string{"message": "success"},
Status: http.StatusOK,
}, nil
}
Register the handler:
Mux.POST("/test/{id}", simba.AuthMultipartHandler(handler))
func AuthRawBodyHandler ¶ added in v0.27.0
func AuthRawBodyHandler[Params, AuthModel, ResponseBody any]( handler func(ctx context.Context, req *simbaModels.Request[io.ReadCloser, Params], authModel AuthModel) (*simbaModels.Response[ResponseBody], error), authHandler AuthHandler[AuthModel], ) Handler
AuthRawBodyHandler handles a Request with the Request body and params.
Register the handler:
Mux.POST("/test/{id}", simba.AuthRawBodyHandler(handler))
func AuthWebSocketHandler ¶
func AuthWebSocketHandler[Params, AuthModel any]( callbacks AuthWebSocketCallbacks[Params, AuthModel], authHandler AuthHandler[AuthModel], ) Handler
AuthWebSocketHandler creates an authenticated handler that uses callbacks for WebSocket lifecycle events.
Example usage:
func chatCallbacks() simba.AuthWebSocketCallbacks[Params, AuthModel] {
return simba.AuthWebSocketCallbacks[Params, AuthModel]{
OnConnect: func(ctx context.Context, conn *simba.WebSocketConnection, connections map[string]*WebSocketConnection, params Params, auth AuthModel) error {
return conn.WriteText(fmt.Sprintf("Welcome %s!", auth.Name))
},
OnMessage: func(ctx context.Context, conn *simba.WebSocketConnection, connections map[string]*WebSocketConnection, msgType ws.OpCode, data []byte, auth AuthModel) error {
message := fmt.Sprintf("[%s]: %s", auth.Name, string(data))
for _, c := range connections {
c.WriteText(message)
}
return nil
},
}
}
bearerAuth := simba.BearerAuth(authFunc, simba.BearerAuthConfig{...})
app.Router.GET("/ws/chat", simba.AuthWebSocketHandler(chatCallbacks, bearerAuth))
func AuthWebSocketHandlerFunc ¶
func AuthWebSocketHandlerFunc[Params, AuthModel any]( callbacksFunc func() AuthWebSocketCallbacks[Params, AuthModel], authHandler AuthHandler[AuthModel], ) Handler
AuthWebSocketHandlerFunc creates an authenticated handler from a function that returns WebSocket callbacks.
func JsonHandler ¶ added in v0.6.0
func JsonHandler[RequestBody, Params, ResponseBody any](h JsonHandlerFunc[RequestBody, Params, ResponseBody]) Handler
JsonHandler handles a Request with the Request body and params.
Example usage:
Define a Request body struct:
type RequestBody struct {
Test string `json:"test" validate:"required"`
}
Define a Request params struct:
type Params struct {
Name string `header:"name" validate:"required"`
ID int `path:"id" validate:"required"`
Active bool `query:"active" validate:"required"`
Page int64 `query:"page" validate:"min=0"`
Size int64 `query:"size" validate:"min=0"`
}
Define a handler function:
func(ctx context.Context, req *simba.Request[RequestBody, Params]) (*simba.Response[map[string]string], error) {
// Access the Request body and params fields
req.Body.Test
req.Params.Name
req.Params.ID
req.Params.Page
req.Params.Size
// Return a response
return &simba.Response[map[string]string]{
Headers: map[string][]string{"My-Header": {"header-value"}},
Cookies: []*http.Cookie{{Name: "My-Cookie", Value: "cookie-value"}},
Body: map[string]string{"message": "success"},
Status: http.StatusOK,
}, nil
}
Register the handler:
Mux.POST("/test/{id}", simba.JsonHandler(handler))
func MultipartHandler ¶ added in v0.7.0
func MultipartHandler[Params any, ResponseBody any](h MultipartHandlerFunc[Params, ResponseBody]) Handler
MultipartHandler handles a MultipartRequest with params. // The MultipartRequest holds a MultipartReader and the parsed params. // The reason to provide the reader is to allow the logic for processing the parts to be handled by the handler function.
Example usage:
Define a Request params struct:
type Params struct {
Name string `header:"name" validate:"required"`
ID int `path:"id" validate:"required"`
Active bool `query:"active" validate:"required"`
Page int64 `query:"page" validate:"min=0"`
Size int64 `query:"size" validate:"min=0"`
}
Define a handler function:
func(ctx context.Context, req *simba.Request[RequestBody, Params]) (*simba.Response[map[string]string], error) {
// Access the Multipart reader and params fields
req.Params.Name
req.Params.ID
req.Params.Page
req.Params.Size
req.Reader // Multipart reader
// Return a response
return &simba.Response[map[string]string]{
Headers: map[string][]string{"My-Header": {"header-value"}},
Cookies: []*http.Cookie{{Name: "My-Cookie", Value: "cookie-value"}},
Body: map[string]string{"message": "success"},
Status: http.StatusOK,
}, nil
}
Register the handler:
Mux.POST("/test/{id}", simba.MultipartHandler(handler))
func RawBodyHandler ¶ added in v0.27.0
func RawBodyHandler[Params, ResponseBody any](h RawBodyHandlerFunc[Params, ResponseBody]) Handler
RawBodyHandler handles a Request with the Request body and params.
Register the handler:
Mux.POST("/test/{id}", simba.RawBodyHandler(handler))
func WebSocketHandler ¶
func WebSocketHandler[Params any](callbacks WebSocketCallbacks[Params]) Handler
WebSocketHandler creates a handler that uses callbacks for WebSocket lifecycle events.
Example usage:
func chatCallbacks() simba.WebSocketCallbacks[Params] {
return simba.WebSocketCallbacks[Params]{
OnConnect: func(ctx context.Context, conn *simba.WebSocketConnection, connections map[string]*WebSocketConnection, params Params) error {
return conn.WriteText("Welcome!")
},
OnMessage: func(ctx context.Context, conn *simba.WebSocketConnection, connections map[string]*WebSocketConnection, msgType ws.OpCode, data []byte) error {
// Broadcast to all connections
for _, c := range connections {
c.WriteText(string(data))
}
return nil
},
}
}
app.Router.GET("/ws/chat", simba.WebSocketHandler(chatCallbacks))
func WebSocketHandlerFunc ¶
func WebSocketHandlerFunc[Params any](callbacksFunc func() WebSocketCallbacks[Params]) Handler
WebSocketHandlerFunc creates a handler from a function that returns WebSocket callbacks.
type JsonHandlerFunc ¶ added in v0.6.0
type JsonHandlerFunc[RequestBody, Params, ResponseBody any] func(ctx context.Context, req *simbaModels.Request[RequestBody, Params]) (*simbaModels.Response[ResponseBody], error)
JsonHandlerFunc is a function type for handling routes with Request body and params
func (JsonHandlerFunc[RequestBody, Params, ResponseBody]) ServeHTTP ¶ added in v0.6.0
func (h JsonHandlerFunc[RequestBody, Params, ResponseBody]) ServeHTTP(w http.ResponseWriter, r *http.Request)
ServeHTTP implements the http.Handler interface for JsonHandlerFunc
type MultipartHandlerFunc ¶ added in v0.7.0
type MultipartHandlerFunc[Params any, ResponseBody any] func(ctx context.Context, req *simbaModels.MultipartRequest[Params]) (*simbaModels.Response[ResponseBody], error)
MultipartHandlerFunc is a function type for handling routes with Request body and params
func (MultipartHandlerFunc[Params, ResponseBody]) ServeHTTP ¶ added in v0.7.0
func (h MultipartHandlerFunc[Params, ResponseBody]) ServeHTTP(w http.ResponseWriter, r *http.Request)
ServeHTTP implements the http.Handler interface for JsonHandlerFunc
type RawBodyHandlerFunc ¶ added in v0.27.0
type RawBodyHandlerFunc[Params, ResponseBody any] func(ctx context.Context, req *simbaModels.Request[io.ReadCloser, Params]) (*simbaModels.Response[ResponseBody], error)
RawBodyHandlerFunc is a function type for handling routes with Request body and params
func (RawBodyHandlerFunc[Params, ResponseBody]) ServeHTTP ¶ added in v0.27.0
func (h RawBodyHandlerFunc[Params, ResponseBody]) ServeHTTP(w http.ResponseWriter, r *http.Request)
ServeHTTP implements the http.Handler interface for RawBodyHandlerFunc
type Router ¶ added in v0.2.0
Router is a simple Mux that wraps http.ServeMux and allows for middleware chaining and type information storage for routes.
func (*Router) DELETE ¶ added in v0.2.0
DELETE registers a handler for DELETE requests to the given pattern
func (*Router) DELETEWithMiddleware ¶ added in v0.26.0
func (r *Router) DELETEWithMiddleware(path string, handler Handler, middleware ...func(http.Handler) http.Handler)
DELETEWithMiddleware registers a handler for DELETE requests to the given pattern wrapped with a middleware function
func (*Router) GETWithMiddleware ¶ added in v0.26.0
func (r *Router) GETWithMiddleware(path string, handler Handler, middleware ...func(http.Handler) http.Handler)
GETWithMiddleware registers a handler for GET requests to the given pattern wrapped with a middleware function
func (*Router) GenerateOpenAPIDocumentation ¶ added in v0.15.0
GenerateOpenAPIDocumentation generates the OpenAPI documentation for the routes mounted in the router if enabled in settings.Docs
func (*Router) HEAD ¶ added in v0.2.0
HEAD registers a handler for HEAD requests to the given pattern
func (*Router) HEADWithMiddleware ¶ added in v0.26.0
func (r *Router) HEADWithMiddleware(path string, handler Handler, middleware ...func(http.Handler) http.Handler)
HEADWithMiddleware registers a handler for HEAD requests to the given pattern wrapped with a middleware function
func (*Router) OPTIONS ¶ added in v0.2.0
OPTIONS registers a handler for OPTIONS requests to the given pattern
func (*Router) OPTIONSWithMiddleware ¶ added in v0.26.0
func (r *Router) OPTIONSWithMiddleware(path string, handler Handler, middleware ...func(http.Handler) http.Handler)
OPTIONSWithMiddleware registers a handler for OPTIONS requests to the given pattern wrapped with a middleware function
func (*Router) PATCH ¶ added in v0.2.0
PATCH registers a handler for PATCH requests to the given pattern
func (*Router) PATCHWithMiddleware ¶ added in v0.26.0
func (r *Router) PATCHWithMiddleware(path string, handler Handler, middleware ...func(http.Handler) http.Handler)
PATCHWithMiddleware registers a handler for PATCH requests to the given pattern wrapped with a middleware function
func (*Router) POST ¶ added in v0.2.0
POST registers a handler for POST requests to the given pattern
func (*Router) POSTWithMiddleware ¶ added in v0.26.0
func (r *Router) POSTWithMiddleware(path string, handler Handler, middleware ...func(http.Handler) http.Handler)
POSTWithMiddleware registers a handler for POST requests to the given pattern wrapped with a middleware function
func (*Router) PUTWithMiddleware ¶ added in v0.26.0
func (r *Router) PUTWithMiddleware(path string, handler Handler, middleware ...func(http.Handler) http.Handler)
PUTWithMiddleware registers a handler for PUT requests to the given pattern wrapped with a middleware function
func (*Router) ServeHTTP ¶ added in v0.2.0
func (r *Router) ServeHTTP(w http.ResponseWriter, req *http.Request)
ServeHTTP implements the http.Handler interface for the Router type
type SessionCookieAuthConfig ¶ added in v0.18.0
type SessionCookieAuthHandlerFunc ¶ added in v0.18.0
type SessionCookieAuthHandlerFunc[AuthModel any] func(ctx context.Context, cookie string) (AuthModel, error)
SessionCookieAuthHandlerFunc is a function that handles session cookie authentication. This is the function that should be implemented by the user. It should return the user model if the API key is valid, otherwise it should return an error.
type SessionCookieAuthType ¶ added in v0.18.0
type SessionCookieAuthType[AuthModel any] struct { CookieName string Description string Handler SessionCookieAuthHandlerFunc[AuthModel] }
func (SessionCookieAuthType[AuthModel]) GetDescription ¶ added in v0.18.0
func (t SessionCookieAuthType[AuthModel]) GetDescription() string
func (SessionCookieAuthType[AuthModel]) GetFieldName ¶ added in v0.18.0
func (t SessionCookieAuthType[AuthModel]) GetFieldName() string
func (SessionCookieAuthType[AuthModel]) GetFormat ¶ added in v0.18.0
func (t SessionCookieAuthType[AuthModel]) GetFormat() string
func (SessionCookieAuthType[AuthModel]) GetHandler ¶ added in v0.18.0
func (t SessionCookieAuthType[AuthModel]) GetHandler() AuthHandlerFunc[AuthModel]
func (SessionCookieAuthType[AuthModel]) GetIn ¶ added in v0.18.0
func (t SessionCookieAuthType[AuthModel]) GetIn() oapi.In
func (SessionCookieAuthType[AuthModel]) GetName ¶ added in v0.18.0
func (t SessionCookieAuthType[AuthModel]) GetName() string
func (SessionCookieAuthType[AuthModel]) GetType ¶ added in v0.18.0
func (t SessionCookieAuthType[AuthModel]) GetType() openapiModels.AuthType
type ValidationError ¶
func MapValidationError ¶ added in v0.23.2
func MapValidationError(err validator.FieldError, request any) ValidationError
func ValidateStruct ¶ added in v0.10.4
func ValidateStruct(request any) []ValidationError
ValidateStruct is a helper function for validating requests using the validator package. If the request is nil, it will return nil. If the request is valid, it will return an empty slice of ValidationErrors. If the request is invalid, it will return a slice of ValidationErrors containing the validation errors for each field.
func (ValidationError) Error ¶ added in v0.23.1
func (e ValidationError) Error() string
type WebSocketCallbackHandlerFunc ¶
type WebSocketCallbackHandlerFunc[Params any] struct { // contains filtered or unexported fields }
WebSocketCallbackHandlerFunc is a function type for handling WebSocket connections with callbacks
func (*WebSocketCallbackHandlerFunc[Params]) ServeHTTP ¶
func (h *WebSocketCallbackHandlerFunc[Params]) ServeHTTP(w http.ResponseWriter, r *http.Request)
ServeHTTP implements the http.Handler interface for WebSocketCallbackHandlerFunc
type WebSocketCallbacks ¶
type WebSocketCallbacks[Params any] struct { // OnConnect is called after the WebSocket upgrade succeeds (optional) // Use this to send welcome messages, initialize state, etc. // If an error is returned, the connection is closed and OnDisconnect is called OnConnect func(ctx context.Context, conn *WebSocketConnection, connections map[string]*WebSocketConnection, params Params) error // OnMessage is called for each incoming message from the client (required) // The messageType indicates if this is text (ws.OpText) or binary (ws.OpBinary) // If an error is returned, OnError is called (if provided), otherwise connection closes OnMessage func(ctx context.Context, conn *WebSocketConnection, connections map[string]*WebSocketConnection, messageType ws.OpCode, data []byte) error // OnDisconnect is called when the connection is closed (optional) // This is ALWAYS called, even if OnConnect or OnMessage returns an error // The err parameter contains the error that caused disconnection (nil for clean close) // This is guaranteed to run via defer, making it perfect for cleanup OnDisconnect func(ctx context.Context, params Params, err error) // OnError is called when an error occurs during OnConnect or OnMessage (optional) // Return true to continue processing messages, false to close the connection // If not provided, any error will close the connection OnError func(ctx context.Context, conn *WebSocketConnection, err error) bool }
WebSocketCallbacks defines the lifecycle callbacks for a WebSocket connection All callbacks are called sequentially for a single connection Multiple connections can have their callbacks called concurrently
type WebSocketConnection ¶
type WebSocketConnection struct {
// ID is a unique identifier for this connection
ID string
// Params contains the parsed route/query/header parameters
Params any
// contains filtered or unexported fields
}
WebSocketConnection wraps a WebSocket connection with thread-safe write operations.
func (*WebSocketConnection) Close ¶
func (wc *WebSocketConnection) Close() error
Close closes the WebSocket connection (thread-safe)
func (*WebSocketConnection) Context ¶
func (wc *WebSocketConnection) Context() context.Context
Context returns the connection's context The context is cancelled when the connection is closed
func (*WebSocketConnection) WriteBinary ¶
func (wc *WebSocketConnection) WriteBinary(data []byte) error
WriteBinary sends a binary message to the client (thread-safe)
func (*WebSocketConnection) WriteJSON ¶
func (wc *WebSocketConnection) WriteJSON(v any) error
WriteJSON marshals v to JSON and sends it as a text message (thread-safe)
func (*WebSocketConnection) WriteText ¶
func (wc *WebSocketConnection) WriteText(msg string) error
WriteText sends a text message to the client (thread-safe)