Documentation
¶
Overview ¶
Package supergin provides an enhanced Gin framework with named routes, input/output validation, dependency injection, and Rails-like REST resources.
Index ¶
- func Get(name string) interface{}
- func GetFromContext(ctx context.Context, name string) interface{}
- func GetFromContextT[T any](ctx context.Context, name string) T
- func GetT[T any](name string) T
- func GetValidatedInput(c *gin.Context) (interface{}, bool)
- func IsErrorCode(err error, code ErrorCode) bool
- func Resolve[T any](name string) T
- type CRUDController
- type Config
- type CustomRoute
- type DIContainer
- func GetDI() *DIContainer
- func Register(name string, factory interface{}, scope DIScope, dependencies ...string) *DIContainer
- func RegisterInstance(name string, instance interface{}) *DIContainer
- func RegisterRequest(name string, factory interface{}, dependencies ...string) *DIContainer
- func RegisterSingleton(name string, factory interface{}, dependencies ...string) *DIContainer
- func RegisterTransient(name string, factory interface{}, dependencies ...string) *DIContainer
- func (di *DIContainer) Get(name string) interface{}
- func (di *DIContainer) GetFromContext(ctx context.Context, name string) interface{}
- func (di *DIContainer) ListServices() map[string]*ServiceDefinition
- func (di *DIContainer) Middleware() gin.HandlerFunc
- func (di *DIContainer) Register(name string, factory interface{}, scope DIScope, dependencies ...string) *DIContainer
- func (di *DIContainer) RegisterInstance(name string, instance interface{}) *DIContainer
- func (di *DIContainer) RegisterRequest(name string, factory interface{}, dependencies ...string) *DIContainer
- func (di *DIContainer) RegisterSingleton(name string, factory interface{}, dependencies ...string) *DIContainer
- func (di *DIContainer) RegisterTransient(name string, factory interface{}, dependencies ...string) *DIContainer
- type DIScope
- type DefaultWebSocketHandler
- func (h *DefaultWebSocketHandler) OnConnect(conn *WebSocketConnection)
- func (h *DefaultWebSocketHandler) OnDisconnect(conn *WebSocketConnection)
- func (h *DefaultWebSocketHandler) OnError(conn *WebSocketConnection, err error)
- func (h *DefaultWebSocketHandler) OnMessage(conn *WebSocketConnection, messageType string, data interface{})
- type Engine
- func (e *Engine) BidirectionalGrpcHttp(name string, httpPath string, grpcService string, grpcMethod string, ...) error
- func (e *Engine) DI() *DIContainer
- func (e *Engine) GetRoute(name string) (*RouteInfo, bool)
- func (e *Engine) GetRoutes() map[string]*RouteInfo
- func (e *Engine) GetRoutesByTag(tag string) []*RouteInfo
- func (e *Engine) GrpcBridge() *GrpcBridge
- func (e *Engine) Named(name string) *RouteBuilder
- func (e *Engine) Resource(name string, controller CRUDController) *ResourceBuilder
- func (e *Engine) URLFor(name string, params ...interface{}) (string, error)
- func (e *Engine) WebSocket(name, path string, handler WebSocketHandler) *WebSocketHub
- type ErrorCode
- type GrpcBridge
- type GrpcConverter
- type GrpcMethod
- type GrpcService
- type InputOutput
- type ModelInfo
- type RequestScope
- type ResourceBuilder
- func (rb *ResourceBuilder) Build() *RestRoutes
- func (rb *ResourceBuilder) Collection(name, method, path string, handler gin.HandlerFunc) *ResourceBuilder
- func (rb *ResourceBuilder) Except(actions ...string) *ResourceBuilder
- func (rb *ResourceBuilder) Member(name, method, path string, handler gin.HandlerFunc) *ResourceBuilder
- func (rb *ResourceBuilder) Only(actions ...string) *ResourceBuilder
- func (rb *ResourceBuilder) WithBasePath(path string) *ResourceBuilder
- func (rb *ResourceBuilder) WithMetadata(key string, value interface{}) *ResourceBuilder
- func (rb *ResourceBuilder) WithMiddleware(middleware ...gin.HandlerFunc) *ResourceBuilder
- func (rb *ResourceBuilder) WithModel(input, output, search interface{}) *ResourceBuilder
- func (rb *ResourceBuilder) WithTags(tags ...string) *ResourceBuilder
- type RestRoutes
- type RouteBuilder
- func (rb *RouteBuilder) DELETE(path string) *RouteBuilder
- func (rb *RouteBuilder) GET(path string) *RouteBuilder
- func (rb *RouteBuilder) Handler(handler gin.HandlerFunc) *RouteBuilder
- func (rb *RouteBuilder) HandlerFunc(handler gin.HandlerFunc) *RouteBuilder
- func (rb *RouteBuilder) PATCH(path string) *RouteBuilder
- func (rb *RouteBuilder) POST(path string) *RouteBuilder
- func (rb *RouteBuilder) PUT(path string) *RouteBuilder
- func (rb *RouteBuilder) WebSocket(path string, handler WebSocketHandler) *RouteBuilder
- func (rb *RouteBuilder) WithDescription(desc string) *RouteBuilder
- func (rb *RouteBuilder) WithGrpcBridge(serviceName, methodName string) *RouteBuilder
- func (rb *RouteBuilder) WithIO(input, output interface{}) *RouteBuilder
- func (rb *RouteBuilder) WithInput(input interface{}) *RouteBuilder
- func (rb *RouteBuilder) WithMetadata(key string, value interface{}) *RouteBuilder
- func (rb *RouteBuilder) WithMiddleware(middleware ...gin.HandlerFunc) *RouteBuilder
- func (rb *RouteBuilder) WithOutput(output interface{}) *RouteBuilder
- func (rb *RouteBuilder) WithTags(tags ...string) *RouteBuilder
- type RouteInfo
- type ServiceDefinition
- type SuperGinError
- type WebSocketConfig
- type WebSocketConnection
- type WebSocketHandler
- type WebSocketHub
- type WebSocketMessage
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func GetFromContext ¶
func GetFromContextT ¶
GetFromContextT returns a typed service instance with context
func GetValidatedInput ¶
GetValidatedInput retrieves validated input from context
func IsErrorCode ¶
IsErrorCode checks if an error is a SuperGin error with specific code
Types ¶
type CRUDController ¶
type CRUDController interface {
Create(c *gin.Context)
Read(c *gin.Context)
Update(c *gin.Context)
Delete(c *gin.Context)
List(c *gin.Context)
Search(c *gin.Context)
}
CRUDController interface for REST operations
type CustomRoute ¶
type CustomRoute struct {
Method string
Path string
Handler gin.HandlerFunc
Name string
Description string
InputType reflect.Type
OutputType reflect.Type
}
CustomRoute defines additional routes for a model
type DIContainer ¶
type DIContainer struct {
// contains filtered or unexported fields
}
DIContainer manages dependency injection
func Register ¶
func Register(name string, factory interface{}, scope DIScope, dependencies ...string) *DIContainer
Global convenience functions
func RegisterInstance ¶
func RegisterInstance(name string, instance interface{}) *DIContainer
func RegisterRequest ¶
func RegisterRequest(name string, factory interface{}, dependencies ...string) *DIContainer
func RegisterSingleton ¶
func RegisterSingleton(name string, factory interface{}, dependencies ...string) *DIContainer
func RegisterTransient ¶
func RegisterTransient(name string, factory interface{}, dependencies ...string) *DIContainer
func (*DIContainer) Get ¶
func (di *DIContainer) Get(name string) interface{}
Get resolves and returns a service instance
func (*DIContainer) GetFromContext ¶
func (di *DIContainer) GetFromContext(ctx context.Context, name string) interface{}
GetFromContext resolves a service with request context
func (*DIContainer) ListServices ¶
func (di *DIContainer) ListServices() map[string]*ServiceDefinition
ListServices returns all registered services
func (*DIContainer) Middleware ¶
func (di *DIContainer) Middleware() gin.HandlerFunc
Middleware for DI integration
func (*DIContainer) Register ¶
func (di *DIContainer) Register(name string, factory interface{}, scope DIScope, dependencies ...string) *DIContainer
Register registers a service with the DI container
func (*DIContainer) RegisterInstance ¶
func (di *DIContainer) RegisterInstance(name string, instance interface{}) *DIContainer
RegisterInstance registers a pre-created instance as a singleton
func (*DIContainer) RegisterRequest ¶
func (di *DIContainer) RegisterRequest(name string, factory interface{}, dependencies ...string) *DIContainer
RegisterRequest registers a request-scoped service
func (*DIContainer) RegisterSingleton ¶
func (di *DIContainer) RegisterSingleton(name string, factory interface{}, dependencies ...string) *DIContainer
RegisterSingleton registers a singleton service
func (*DIContainer) RegisterTransient ¶
func (di *DIContainer) RegisterTransient(name string, factory interface{}, dependencies ...string) *DIContainer
RegisterTransient registers a transient service
type DefaultWebSocketHandler ¶
type DefaultWebSocketHandler struct {
OnConnectFunc func(conn *WebSocketConnection)
OnDisconnectFunc func(conn *WebSocketConnection)
OnMessageFunc func(conn *WebSocketConnection, messageType string, data interface{})
OnErrorFunc func(conn *WebSocketConnection, err error)
}
Default WebSocket handler implementation
func (*DefaultWebSocketHandler) OnConnect ¶
func (h *DefaultWebSocketHandler) OnConnect(conn *WebSocketConnection)
func (*DefaultWebSocketHandler) OnDisconnect ¶
func (h *DefaultWebSocketHandler) OnDisconnect(conn *WebSocketConnection)
func (*DefaultWebSocketHandler) OnError ¶
func (h *DefaultWebSocketHandler) OnError(conn *WebSocketConnection, err error)
func (*DefaultWebSocketHandler) OnMessage ¶
func (h *DefaultWebSocketHandler) OnMessage(conn *WebSocketConnection, messageType string, data interface{})
type Engine ¶
Engine wraps gin.Engine with enhanced capabilities
func (*Engine) BidirectionalGrpcHttp ¶
func (e *Engine) BidirectionalGrpcHttp(name string, httpPath string, grpcService string, grpcMethod string, httpInput, httpOutput, grpcInput, grpcOutput interface{}) error
Helper function to register both HTTP and gRPC endpoints
func (*Engine) DI ¶
func (e *Engine) DI() *DIContainer
DI returns the dependency injection container
func (*Engine) GetRoutesByTag ¶
GetRoutesByTag returns routes filtered by tag
func (*Engine) GrpcBridge ¶
func (e *Engine) GrpcBridge() *GrpcBridge
Engine extension for gRPC bridge
func (*Engine) Named ¶
func (e *Engine) Named(name string) *RouteBuilder
Named creates a new route builder with a name
func (*Engine) Resource ¶
func (e *Engine) Resource(name string, controller CRUDController) *ResourceBuilder
Resource creates a new resource builder for a model
func (*Engine) WebSocket ¶
func (e *Engine) WebSocket(name, path string, handler WebSocketHandler) *WebSocketHub
Engine extension for WebSocket support
type ErrorCode ¶
type ErrorCode string
ErrorCode represents different types of SuperGin errors
const ( ErrRouteNotFound ErrorCode = "ROUTE_NOT_FOUND" ErrValidationFailed ErrorCode = "VALIDATION_FAILED" ErrDIServiceNotFound ErrorCode = "DI_SERVICE_NOT_FOUND" ErrCircularDependency ErrorCode = "CIRCULAR_DEPENDENCY" ErrInvalidFactory ErrorCode = "INVALID_FACTORY" ErrContextRequired ErrorCode = "CONTEXT_REQUIRED" )
type GrpcBridge ¶
type GrpcBridge struct {
// contains filtered or unexported fields
}
GrpcBridge manages HTTP to gRPC conversions
func NewGrpcBridge ¶
func NewGrpcBridge(engine *Engine) *GrpcBridge
NewGrpcBridge creates a new gRPC bridge
func (*GrpcBridge) CreateGrpcToHttpProxy ¶
func (gb *GrpcBridge) CreateGrpcToHttpProxy(serviceName, methodName string, httpEndpoint string) gin.HandlerFunc
Reverse proxy: gRPC to HTTP
func (*GrpcBridge) RegisterGrpcMethod ¶
func (gb *GrpcBridge) RegisterGrpcMethod(serviceName, methodName string, httpInputType, httpOutputType, grpcInputType, grpcOutputType interface{}) error
RegisterGrpcMethod registers a gRPC method with type mappings
func (*GrpcBridge) RegisterGrpcService ¶
func (gb *GrpcBridge) RegisterGrpcService(name, address, serviceName string) error
RegisterGrpcService registers a gRPC service for HTTP bridging
type GrpcConverter ¶
GrpcConverter interface for types that can convert to/from gRPC
type GrpcMethod ¶
type GrpcMethod struct {
Name string
FullName string
InputType reflect.Type
OutputType reflect.Type
GrpcInputType reflect.Type
GrpcOutputType reflect.Type
StreamingInput bool
StreamingOutput bool
}
GrpcMethod represents a gRPC method configuration
type GrpcService ¶
type GrpcService struct {
Name string
Address string
ServiceName string
Methods map[string]*GrpcMethod
Connection *grpc.ClientConn
}
GrpcService represents a gRPC service configuration
type InputOutput ¶
type InputOutput struct {
Input interface{}
Output interface{}
}
InputOutput defines the container for request/response validation
type ModelInfo ¶
type ModelInfo struct {
Name string
PluralName string
BasePath string
Controller CRUDController
InputType reflect.Type
OutputType reflect.Type
SearchType reflect.Type
Middleware []gin.HandlerFunc
Tags []string
Metadata map[string]interface{}
CustomRoutes map[string]CustomRoute
}
ModelInfo holds information about a model for route generation
type RequestScope ¶
type RequestScope struct {
// contains filtered or unexported fields
}
RequestScope holds request-scoped dependencies
type ResourceBuilder ¶
type ResourceBuilder struct {
// contains filtered or unexported fields
}
ResourceBuilder provides Rails-like resource routing
func (*ResourceBuilder) Build ¶
func (rb *ResourceBuilder) Build() *RestRoutes
Build generates all the REST routes and custom routes
func (*ResourceBuilder) Collection ¶
func (rb *ResourceBuilder) Collection(name, method, path string, handler gin.HandlerFunc) *ResourceBuilder
Collection adds a custom collection route (operates on the collection)
func (*ResourceBuilder) Except ¶
func (rb *ResourceBuilder) Except(actions ...string) *ResourceBuilder
Except excludes specific REST actions from generation
func (*ResourceBuilder) Member ¶
func (rb *ResourceBuilder) Member(name, method, path string, handler gin.HandlerFunc) *ResourceBuilder
Member adds a custom member route (operates on a single resource)
func (*ResourceBuilder) Only ¶
func (rb *ResourceBuilder) Only(actions ...string) *ResourceBuilder
Only restricts which REST actions to generate
func (*ResourceBuilder) WithBasePath ¶
func (rb *ResourceBuilder) WithBasePath(path string) *ResourceBuilder
WithBasePath sets a custom base path for the resource
func (*ResourceBuilder) WithMetadata ¶
func (rb *ResourceBuilder) WithMetadata(key string, value interface{}) *ResourceBuilder
WithMetadata adds metadata to all resource routes
func (*ResourceBuilder) WithMiddleware ¶
func (rb *ResourceBuilder) WithMiddleware(middleware ...gin.HandlerFunc) *ResourceBuilder
WithMiddleware adds middleware to all resource routes
func (*ResourceBuilder) WithModel ¶
func (rb *ResourceBuilder) WithModel(input, output, search interface{}) *ResourceBuilder
WithModel attaches model types to the resource
func (*ResourceBuilder) WithTags ¶
func (rb *ResourceBuilder) WithTags(tags ...string) *ResourceBuilder
WithTags adds tags to all resource routes
type RestRoutes ¶
type RestRoutes struct {
Create string
Read string
Update string
Delete string
List string
Search string
}
RestRoutes holds the generated REST route names
type RouteBuilder ¶
type RouteBuilder struct {
// contains filtered or unexported fields
}
RouteBuilder provides a fluent interface for building routes
func (*RouteBuilder) DELETE ¶
func (rb *RouteBuilder) DELETE(path string) *RouteBuilder
DELETE sets the HTTP method to DELETE
func (*RouteBuilder) GET ¶
func (rb *RouteBuilder) GET(path string) *RouteBuilder
GET sets the HTTP method to GET
func (*RouteBuilder) Handler ¶
func (rb *RouteBuilder) Handler(handler gin.HandlerFunc) *RouteBuilder
Handler sets the handler function and registers the route
func (*RouteBuilder) HandlerFunc ¶
func (rb *RouteBuilder) HandlerFunc(handler gin.HandlerFunc) *RouteBuilder
HandlerFunc is an alias for Handler for convenience
func (*RouteBuilder) PATCH ¶
func (rb *RouteBuilder) PATCH(path string) *RouteBuilder
PATCH sets the HTTP method to PATCH
func (*RouteBuilder) POST ¶
func (rb *RouteBuilder) POST(path string) *RouteBuilder
POST sets the HTTP method to POST
func (*RouteBuilder) PUT ¶
func (rb *RouteBuilder) PUT(path string) *RouteBuilder
PUT sets the HTTP method to PUT
func (*RouteBuilder) WebSocket ¶
func (rb *RouteBuilder) WebSocket(path string, handler WebSocketHandler) *RouteBuilder
WebSocket route builder extension
func (*RouteBuilder) WithDescription ¶
func (rb *RouteBuilder) WithDescription(desc string) *RouteBuilder
WithDescription adds a description to the route
func (*RouteBuilder) WithGrpcBridge ¶
func (rb *RouteBuilder) WithGrpcBridge(serviceName, methodName string) *RouteBuilder
Route builder extension for gRPC bridging
func (*RouteBuilder) WithIO ¶
func (rb *RouteBuilder) WithIO(input, output interface{}) *RouteBuilder
WithIO sets input and output types for validation
func (*RouteBuilder) WithInput ¶
func (rb *RouteBuilder) WithInput(input interface{}) *RouteBuilder
WithInput sets only the input type for validation
func (*RouteBuilder) WithMetadata ¶
func (rb *RouteBuilder) WithMetadata(key string, value interface{}) *RouteBuilder
WithMetadata adds metadata to the route
func (*RouteBuilder) WithMiddleware ¶
func (rb *RouteBuilder) WithMiddleware(middleware ...gin.HandlerFunc) *RouteBuilder
WithMiddleware adds middleware to the route
func (*RouteBuilder) WithOutput ¶
func (rb *RouteBuilder) WithOutput(output interface{}) *RouteBuilder
WithOutput sets only the output type for validation
func (*RouteBuilder) WithTags ¶
func (rb *RouteBuilder) WithTags(tags ...string) *RouteBuilder
WithTags adds tags to the route
type RouteInfo ¶
type RouteInfo struct {
Name string `json:"name"`
Method string `json:"method"`
Path string `json:"path"`
Handler gin.HandlerFunc `json:"-"`
InputType reflect.Type `json:"-"`
OutputType reflect.Type `json:"-"`
Metadata map[string]interface{} `json:"metadata"`
Description string `json:"description"`
Tags []string `json:"tags"`
CreatedAt time.Time `json:"created_at"`
}
RouteInfo holds metadata about a route
type ServiceDefinition ¶
type ServiceDefinition struct {
Name string `json:"name"`
Type reflect.Type `json:"-"`
Scope DIScope `json:"scope"`
Factory interface{} `json:"-"`
Dependencies []string `json:"dependencies"`
Singleton interface{} `json:"-"`
Metadata map[string]interface{} `json:"metadata"`
}
ServiceDefinition defines how to create and manage a service
type SuperGinError ¶
SuperGinError represents an error within the SuperGin framework
func NewSuperGinError ¶
func NewSuperGinError(code ErrorCode, message string, args ...interface{}) *SuperGinError
NewSuperGinError creates a new SuperGin error
func NewSuperGinErrorWithCause ¶
func NewSuperGinErrorWithCause(code ErrorCode, cause error, message string, args ...interface{}) *SuperGinError
NewSuperGinErrorWithCause creates a new SuperGin error with a cause
func (*SuperGinError) Error ¶
func (e *SuperGinError) Error() string
Error implements the error interface
func (*SuperGinError) Unwrap ¶
func (e *SuperGinError) Unwrap() error
Unwrap returns the underlying cause
type WebSocketConfig ¶
type WebSocketConfig struct {
ReadBufferSize int
WriteBufferSize int
CheckOrigin func(r *http.Request) bool
EnableCompression bool
HandshakeTimeout time.Duration
ReadTimeout time.Duration
WriteTimeout time.Duration
PingInterval time.Duration
}
WebSocketConfig holds WebSocket configuration
type WebSocketConnection ¶
type WebSocketConnection struct {
ID string
Conn *websocket.Conn
Send chan []byte
Hub *WebSocketHub
User interface{} // User context/session data
Metadata map[string]interface{}
// contains filtered or unexported fields
}
WebSocketConnection represents a WebSocket connection with metadata
func (*WebSocketConnection) Close ¶
func (conn *WebSocketConnection) Close()
Close closes the WebSocket connection
func (*WebSocketConnection) GetMetadata ¶
func (conn *WebSocketConnection) GetMetadata(key string) (interface{}, bool)
GetMetadata gets metadata for this connection
func (*WebSocketConnection) Send ¶
func (conn *WebSocketConnection) Send(messageType string, data interface{}) error
Send sends a message through this connection
func (*WebSocketConnection) SetMetadata ¶
func (conn *WebSocketConnection) SetMetadata(key string, value interface{})
SetMetadata sets metadata for this connection
type WebSocketHandler ¶
type WebSocketHandler interface {
OnConnect(conn *WebSocketConnection)
OnDisconnect(conn *WebSocketConnection)
OnMessage(conn *WebSocketConnection, messageType string, data interface{})
OnError(conn *WebSocketConnection, err error)
}
WebSocketHandler defines the interface for WebSocket event handlers
type WebSocketHub ¶
type WebSocketHub struct {
// contains filtered or unexported fields
}
WebSocketHub manages all WebSocket connections
func NewWebSocketHub ¶
func NewWebSocketHub(handler WebSocketHandler) *WebSocketHub
NewWebSocketHub creates a new WebSocket hub
func (*WebSocketHub) Broadcast ¶
func (h *WebSocketHub) Broadcast(messageType string, data interface{}) error
Broadcast sends a message to all connected clients
func (*WebSocketHub) GetConnections ¶
func (h *WebSocketHub) GetConnections() map[string]*WebSocketConnection
GetConnections returns all active connections
func (*WebSocketHub) SendToConnection ¶
func (h *WebSocketHub) SendToConnection(connID string, messageType string, data interface{}) error
SendToConnection sends a message to a specific connection