fw

package module
v0.2.7 Latest Latest
Warning

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

Go to latest
Published: Aug 12, 2024 License: MIT Imports: 43 Imported by: 14

README

fw

Documentation

Index

Constants

View Source
const (
	AfterListen = "afterListen"
)
View Source
const MIMEOctetStream = "application/octet-stream"
View Source
const Version = "v1.0.0@beta"

Variables

This section is empty.

Functions

func EqualFold

func EqualFold[S byteSeq](b, s S) bool

EqualFold tests ascii strings or bytes for equality case-insensitively

func GetMIME

func GetMIME(extension string) string

GetMIME returns the content-type of a file extension

func GetReqHeader

func GetReqHeader[V GenericType](c *Context, key string, defaultValue ...V) V

GetReqHeader returns the HTTP request header specified by filed. This function is generic and can handle differnet headers type values.

func IsObject

func IsObject(v interface{}) bool

func StatusMessage

func StatusMessage(status int) string

StatusMessage returns the correct message for the provided HTTP statuscode

func Stringify

func Stringify(v interface{}) string

func Trim

func Trim[S byteSeq](s S, cutset byte) S

Trim is the equivalent of strings/bytes.Trim

func TrimLeft

func TrimLeft[S byteSeq](s S, cutset byte) S

TrimLeft is the equivalent of strings/bytes.TrimLeft

func TrimRight

func TrimRight[S byteSeq](s S, cutset byte) S

TrimRight is the equivalent of strings/bytes.TrimRight

func UUID

func UUID() string

UUID generates an universally unique identifier (UUID)

func UUIDv4

func UUIDv4() string

UUIDv4 returns a Random (Version 4) UUID. The strength of the UUIDs is based on the strength of the crypto/rand package.

Types

type AttributeName

type AttributeName = string

type Context

type Context struct {
	Keys map[string]any

	Errors     errorMsgs
	ErrHandler func(*Context, error)
	// contains filtered or unexported fields
}

func (*Context) Append

func (c *Context) Append(field string, values ...string)

Append the specified value to the HTTP response header field. If the header is not already set, it creates the header with the specified value.

func (*Context) Apply

func (c *Context) Apply(ctl interface{}) error

func (*Context) AsciiJSON

func (c *Context) AsciiJSON(code int, obj any)

func (*Context) ContextString

func (c *Context) ContextString() string

ContextString returns unique string representation of the ctx.

The returned value may be useful for logging.

func (*Context) Data

func (c *Context) Data(code int, contentType string, data []byte)

func (*Context) DataFromReader

func (c *Context) DataFromReader(code int, contentLength int64, contentType string, reader io.Reader, extraHeaders map[string]string)

func (*Context) Error

func (c *Context) Error(err error) *Error

func (*Context) File

func (c *Context) File(filepath string)

func (*Context) FileAttachment

func (c *Context) FileAttachment(filepath, filename string)

func (*Context) Get

func (c *Context) Get(key string) (value any, exists bool)

func (*Context) GetBool

func (c *Context) GetBool(key string) (b bool)

func (*Context) GetDuration

func (c *Context) GetDuration(key string) (d time.Duration)

func (*Context) GetFastContext

func (c *Context) GetFastContext() *fasthttp.RequestCtx

func (*Context) GetFloat64

func (c *Context) GetFloat64(key string) (f64 float64)

func (*Context) GetHeader

func (c *Context) GetHeader(key string, defaultValue ...string) string

GetHeader returns the HTTP request header specified by field. Field names are case-insensitive Returned value is only valid within the handler. Do not store any references. Make copies or use the Immutable setting instead.

func (*Context) GetInt

func (c *Context) GetInt(key string) (i int)

func (*Context) GetInt64

func (c *Context) GetInt64(key string) (i64 int64)

func (*Context) GetString

func (c *Context) GetString(key string) (s string)

func (*Context) GetStringMap

func (c *Context) GetStringMap(key string) (sm map[string]any)

func (*Context) GetStringMapString

func (c *Context) GetStringMapString(key string) (sms map[string]string)

func (*Context) GetStringMapStringSlice

func (c *Context) GetStringMapStringSlice(key string) (smss map[string][]string)

func (*Context) GetStringSlice

func (c *Context) GetStringSlice(key string) (ss []string)

func (*Context) GetTime

func (c *Context) GetTime(key string) (t time.Time)

func (*Context) GetUint

func (c *Context) GetUint(key string) (ui uint)

func (*Context) GetUint64

func (c *Context) GetUint64(key string) (ui64 uint64)

func (*Context) HTML

func (c *Context) HTML(code int, name string, obj any)

func (*Context) HTMLPure added in v0.1.1

func (c *Context) HTMLPure(code int, content string, obj any)

func (*Context) Injector

func (c *Context) Injector() inject.Injector

func (*Context) Invoke added in v0.2.1

func (c *Context) Invoke(i interface{}) ([]reflect.Value, error)

func (*Context) IsFromLocal

func (c *Context) IsFromLocal() bool

IsFromLocal will return true if request came from local.

func (*Context) JSON

func (c *Context) JSON(code int, obj any)

func (*Context) JSONP

func (c *Context) JSONP(data any, callback ...string)

func (*Context) Location

func (c *Context) Location(path string)

Location sets the response Location HTTP header to the specified path parameter.

func (*Context) Map

func (c *Context) Map(i ...interface{}) inject.TypeMapper

func (*Context) MapTo

func (c *Context) MapTo(i interface{}, j interface{}) inject.TypeMapper

func (*Context) Method

func (c *Context) Method() string

func (*Context) MustGet

func (c *Context) MustGet(key string) any

func (*Context) Param

func (c *Context) Param(key string) string

func (*Context) Protocol

func (c *Context) Protocol() string

Protocol returns the HTTP protocol of request: HTTP/1.1 and HTTP/2.

func (*Context) Provide

func (c *Context) Provide(i interface{}) error

func (*Context) PureJSON

func (c *Context) PureJSON(code int, obj any)

func (*Context) Redirect

func (c *Context) Redirect(code int, location string)

func (*Context) RemoteIP

func (c *Context) RemoteIP() string

func (*Context) Render

func (c *Context) Render(code int, r render.IRender)

func (*Context) SaveUploadFile added in v0.1.1

func (c *Context) SaveUploadFile(file *multipart.FileHeader, dst string) error

func (*Context) SendStatus

func (c *Context) SendStatus(status int)

SendStatus sets the HTTP status code and if the response body is empty, it sets the correct status message in the body.

func (*Context) SendStream

func (c *Context) SendStream(stream io.Reader, size ...int) error

SendStream sets response body stream and optional body size.

func (*Context) Set

func (c *Context) Set(key string, value any)

func (*Context) SetHeader

func (c *Context) SetHeader(key, val string)

SetHeader sets the response's HTTP header field to the specified key, value.

func (*Context) Status

func (c *Context) Status(code int)

func (*Context) Stream

func (c *Context) Stream(step func(w *bufio.Writer))

Stream sends a streaming response and returns a boolean indicates "Is client disconnected in middle of stream"

func (*Context) String

func (c *Context) String(code int, format string, values ...any)

func (*Context) Type

func (c *Context) Type(extension string, charset ...string)

Type sets the Content-Type HTTP header to the MIME type specified by the file extension.

func (*Context) Vary

func (c *Context) Vary(fields ...string)

Vary adds the given header field to the Vary response header. This will append the header, if not already listed, otherwise leaves it listed in the current location.

func (*Context) Write

func (c *Context) Write(p []byte) (int, error)

Write appends p into response body.

func (*Context) WriteString

func (c *Context) WriteString(s string)

WriteString appends s to response body.

func (*Context) Writef

func (c *Context) Writef(f string, a ...any) (int, error)

Writef appends `f` & `a` into response body writer.

func (*Context) XHR

func (c *Context) XHR() bool

XHR returns a Boolean property, that is true, if the request's X-Requested-With header field is XMLHttpRequest, indicating that the request was issued by a client library (such as jQuery).

func (*Context) XML

func (c *Context) XML(code int, obj any)

type Entry

type Entry struct {
	*logrus.Entry
}

func (*Entry) Debug

func (entry *Entry) Debug(args ...interface{})

func (*Entry) Error

func (entry *Entry) Error(args ...interface{})

func (*Entry) Fatal

func (entry *Entry) Fatal(args ...interface{})

func (*Entry) Info

func (entry *Entry) Info(args ...interface{})

func (*Entry) Panic

func (entry *Entry) Panic(args ...interface{})

func (*Entry) Trace

func (entry *Entry) Trace(args ...interface{})

func (*Entry) Warn

func (entry *Entry) Warn(args ...interface{})

type Error

type Error struct {
	Err  error
	Type ErrorType
	Meta any
}

func (Error) Error

func (msg Error) Error() string

func (*Error) IsType

func (msg *Error) IsType(flags ErrorType) bool

func (*Error) JSON

func (msg *Error) JSON() any

func (*Error) MarshalJSON

func (msg *Error) MarshalJSON() ([]byte, error)

func (*Error) SetMeta

func (msg *Error) SetMeta(data any) *Error

func (*Error) SetType

func (msg *Error) SetType(flags ErrorType) *Error

SetType sets the error's type.

func (*Error) Unwrap

func (msg *Error) Unwrap() error

type ErrorType

type ErrorType uint64
const (
	// ErrorTypeBind is used when Context.Bind() fails.
	ErrorTypeBind ErrorType = 1 << 63
	// ErrorTypeRender is used when Context.Render() fails.
	ErrorTypeRender ErrorType = 1 << 62
	// ErrorTypePrivate indicates a private error.
	ErrorTypePrivate ErrorType = 1 << 0
	// ErrorTypePublic indicates a public error.
	ErrorTypePublic ErrorType = 1 << 1
	// ErrorTypeAny indicates any other error.
	ErrorTypeAny ErrorType = 1<<64 - 1
	// ErrorTypeNu indicates any other error.
	ErrorTypeNu = 2
)

type Formatter

type Formatter struct {
	PrettyPrint bool
	Colorize    bool
}

func Console

func Console() *Formatter

func File added in v0.2.7

func File() *Formatter

func (*Formatter) Format

func (f *Formatter) Format(entry *logrus.Entry) ([]byte, error)

type GenericType

type GenericType interface {
	GenericTypeInteger | GenericTypeFloat | bool | string | []byte
}

type GenericTypeFloat

type GenericTypeFloat interface {
	float32 | float64
}

type GenericTypeInteger

type GenericTypeInteger interface {
	GenericTypeIntegerSigned | GenericTypeIntegerUnsigned
}

type GenericTypeIntegerSigned

type GenericTypeIntegerSigned interface {
	int | int8 | int16 | int32 | int64
}

type GenericTypeIntegerUnsigned

type GenericTypeIntegerUnsigned interface {
	uint | uint8 | uint16 | uint32 | uint64
}

type H

type H map[string]any

func (H) MarshalXML

func (h H) MarshalXML(e *xml.Encoder, start xml.StartElement) error

type HandlerFunc

type HandlerFunc = func(*Context)

type HookHandler

type HookHandler interface {
	HandleServerInfo(si []string)
	HandleStructs(ctl *astp.Element)

	Print(slot string)
}

type IMiddleware

type IMiddleware interface {
	// Name returns middleware's name
	Name() string
	// Attribute returns middleware's Attribute just like Websocket so that you can use it like // @Websocket
	Attribute() AttributeName
	// GetSlot returns slot type
	GetSlot() SlotType
	// SetParam pass params (strings with query format) to middleware
	SetParam(p string)
	// GetParam return params string
	GetParam() string

	Constructor(server inject.Provider)
	// contains filtered or unexported methods
}

IMiddleware interface of middleware

type IMiddlewareCtl

type IMiddlewareCtl interface {
	IMiddlewareMethod
	// CloneAsCtl returns a copy from Middleware Container
	CloneAsCtl() IMiddlewareCtl
	// HandlerController will be called when handling controller
	// returns many RouteItem(field `Path` is not empty) if you want to register a route
	HandlerController(base string) []*RouteItem
	// GetCtlRValue returns the controller's reflect value that the called method belongs to
	GetCtlRValue() reflect.Value
	SetCtlRValue(rv reflect.Value)
}

type IMiddlewareGlobal

type IMiddlewareGlobal interface {
	IMiddlewareCtl
}

type IMiddlewareMethod

type IMiddlewareMethod interface {
	IMiddleware
	// CloneAsMethod returns a copy from Middleware Container
	CloneAsMethod() IMiddlewareMethod
	// HandlerMethod will be called when wrap a method
	HandlerMethod(next HandlerFunc) HandlerFunc
	// GetMethodRValue returns the method's reflect value which called
	GetMethodRValue() reflect.Value
	SetMethodRValue(rv reflect.Value)

	// HandlerIgnored will be called when a method is marked as @Ignore <ControllerMiddleware Attribute>
	// only implement it when your middleware needs to handle @Ignore (like SessionMiddleware or AuthMiddleware)
	HandlerIgnored(next HandlerFunc) HandlerFunc
}

type JO

type JO map[string]interface{}

type LogFileHook

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

func NewFileHook

func NewFileHook(output interface{}, formatter logrus.Formatter) *LogFileHook

func (*LogFileHook) Fire

func (hook *LogFileHook) Fire(entry *logrus.Entry) error

func (*LogFileHook) Levels

func (hook *LogFileHook) Levels() []logrus.Level

func (*LogFileHook) SetDefaultPath

func (hook *LogFileHook) SetDefaultPath(defaultPath string)

func (*LogFileHook) SetDefaultWriter

func (hook *LogFileHook) SetDefaultWriter(defaultWriter io.Writer)

func (*LogFileHook) SetFormatter

func (hook *LogFileHook) SetFormatter(formatter logrus.Formatter)

type LoggerOption added in v0.2.4

type LoggerOption struct {
	LoggerLevel       int    `yaml:"loggerLevel" default:"4"` //0-6 0: Panic 6: Trace
	SeparateLevelFile bool   `yaml:"separateLevelFile" default:"false"`
	LogDir            string `yaml:"logDir" default:"log"`
	RotateFile        bool   `yaml:"rotate" default:"true"`
	MaxSize           int    `yaml:"maxSize" default:"5"`
	MaxAge            int    `yaml:"maxAge" default:"28"`
	MaxBackups        int    `yaml:"maxBackups" default:"3"`
	Compress          bool   `yaml:"compress" default:"false"`
	LocalTime         bool   `yaml:"localTime" default:"true"`
}

type Middleware

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

func NewMiddleware

func NewMiddleware(name string, slot string, attr string) *Middleware

func (*Middleware) Attribute

func (m *Middleware) Attribute() AttributeName

func (*Middleware) Constructor added in v0.2.4

func (m *Middleware) Constructor(server inject.Provider)

func (*Middleware) GetParam

func (m *Middleware) GetParam() string

func (*Middleware) GetSlot

func (m *Middleware) GetSlot() SlotType

func (*Middleware) Name

func (m *Middleware) Name() string

func (*Middleware) SetAttribute

func (m *Middleware) SetAttribute(attr AttributeName)

func (*Middleware) SetName

func (m *Middleware) SetName(name string)

func (*Middleware) SetParam

func (m *Middleware) SetParam(p string)

func (*Middleware) SetSlot

func (m *Middleware) SetSlot(slotType SlotType)

type MiddlewareContainer

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

MiddlewareContainer stores middlewares global middlewares will be stored with its Name as key

func NewMiddlewareContainer

func NewMiddlewareContainer() *MiddlewareContainer

func (*MiddlewareContainer) GetByAttribute

func (m *MiddlewareContainer) GetByAttribute(slot string, attribute string) (IMiddleware, bool)

GetByAttribute returns middleware with specified slot and attr.

func (*MiddlewareContainer) GetByAttributeCtl

func (m *MiddlewareContainer) GetByAttributeCtl(attribute string) (IMiddlewareCtl, bool)

GetByAttributeCtl find controller middleware(IMiddlewareCtl) with attribute name

func (*MiddlewareContainer) GetByAttributeMethod

func (m *MiddlewareContainer) GetByAttributeMethod(attribute string) (IMiddlewareMethod, bool)

GetByAttributeMethod find method middleware(IMiddlewareMethod) with attribute name

func (*MiddlewareContainer) GetGlobal

func (m *MiddlewareContainer) GetGlobal(f func(middleware IMiddlewareGlobal) bool) bool

GetGlobal iterate global middlewares stop at `f` returns true

func (*MiddlewareContainer) Reg

func (m *MiddlewareContainer) Reg(middleware IMiddleware)

Reg will store middleware to specified map according to its slot

func (*MiddlewareContainer) VisitAll

func (m *MiddlewareContainer) VisitAll(slot string, f func(middleware IMiddleware) bool) bool

VisitAll visit all middlewares with the specified slot if f returns true, the loop will terminate

type MiddlewareCtl

type MiddlewareCtl struct {
	*MiddlewareMethod
	// contains filtered or unexported fields
}

func NewMiddlewareCtl

func NewMiddlewareCtl(name string, attr string) *MiddlewareCtl

func (*MiddlewareCtl) GetCtlRValue added in v0.2.1

func (m *MiddlewareCtl) GetCtlRValue() reflect.Value

func (*MiddlewareCtl) SetCtlRValue added in v0.2.1

func (m *MiddlewareCtl) SetCtlRValue(v reflect.Value)

type MiddlewareGlobal

type MiddlewareGlobal struct {
	*Middleware
}

func NewMiddlewareGlobal

func NewMiddlewareGlobal(name string) *MiddlewareGlobal

func (*MiddlewareGlobal) GetCtlRValue added in v0.2.1

func (m *MiddlewareGlobal) GetCtlRValue() reflect.Value

func (*MiddlewareGlobal) GetMethodRValue added in v0.2.1

func (m *MiddlewareGlobal) GetMethodRValue() reflect.Value

func (*MiddlewareGlobal) HandlerIgnored added in v0.2.1

func (m *MiddlewareGlobal) HandlerIgnored(nextHandlerFunc HandlerFunc) HandlerFunc

func (*MiddlewareGlobal) SetCtlRValue added in v0.2.1

func (m *MiddlewareGlobal) SetCtlRValue(rv reflect.Value)

func (*MiddlewareGlobal) SetMethodRValue added in v0.2.1

func (m *MiddlewareGlobal) SetMethodRValue(rv reflect.Value)

type MiddlewareMethod

type MiddlewareMethod struct {
	*Middleware
	// contains filtered or unexported fields
}

func NewMiddlewareMethod

func NewMiddlewareMethod(name string, attr string) *MiddlewareMethod

func NewMiddlewareMethodForCtl added in v0.2.1

func NewMiddlewareMethodForCtl(name string, attr string) *MiddlewareMethod

func (*MiddlewareMethod) GetMethodRValue added in v0.2.1

func (m *MiddlewareMethod) GetMethodRValue() reflect.Value

func (*MiddlewareMethod) HandlerIgnored added in v0.2.1

func (m *MiddlewareMethod) HandlerIgnored(nextHandlerFunc HandlerFunc) HandlerFunc

func (*MiddlewareMethod) SetMethodRValue added in v0.2.1

func (m *MiddlewareMethod) SetMethodRValue(v reflect.Value)

type PathMap

type PathMap map[logrus.Level]string

type RootFields

type RootFields struct {
	Timestamp string
	Func      string
	Level     logrus.Level
	Fields    interface{}
}

type RouteItem

type RouteItem struct {
	Method     string            // HTTP METHOD
	Path       string            // route path
	IsHide     bool              // if set true, this route will not show in route table
	H          HandlerFunc       // handler for this route
	Middleware IMiddlewareMethod // just refer to middleware itself
}

func EmptyRouteItem

func EmptyRouteItem(m IMiddlewareMethod) []*RouteItem

EmptyRouteItem returns an empty []*RouteItem which won't register any route

type Server

type Server struct {
	inject.Injector
	// contains filtered or unexported fields
}

func New

func New() *Server

func (*Server) RegisterHooks

func (s *Server) RegisterHooks(handler HookHandler)

func (*Server) RegisterRoute

func (s *Server) RegisterRoute(controller any)

func (*Server) RegisterRoutes

func (s *Server) RegisterRoutes(controller ...any)

func (*Server) Run

func (s *Server) Run()

func (*Server) Use

func (s *Server) Use(middleware IMiddleware)

Use register middleware to server. you can only use the @'Attribute' after register a middleware

type ServerOption added in v0.2.4

type ServerOption struct {
	IntranetIP            string
	Dev                   bool         `yaml:"dev" default:"true"`
	Debug                 bool         `yaml:"debug" default:"true"`
	NoColor               bool         `yaml:"nocolor" default:"false"`
	BasePath              string       `yaml:"basePath" default:"/"`
	Listen                string       `yaml:"listen" default:"127.0.0.1"` //监听地址
	Title                 string       `yaml:"title" default:"fw api"`
	Name                  string       `yaml:"name" default:"fw"` //server_token
	ShowRequestTimeHeader bool         `yaml:"showRequestTimeHeader,omitempty" default:"true"`
	RequestTimeHeader     string       `yaml:"requestTimeHeader,omitempty" default:"Request-Time"`
	Port                  int          `yaml:"port" default:"2024"`
	AstFile               string       `yaml:"astFile" default:"gen.json"` //ast json file generated by github.com/linxlib/astp. default is gen.json
	Logger                LoggerOption `yaml:"logger"`
}

type SlotType

type SlotType = string
const (
	SlotGlobal     SlotType = "global"
	SlotController SlotType = "controller"
	SlotMethod     SlotType = "method"
)

type WriterMap

type WriterMap map[logrus.Level]io.Writer

Directories

Path Synopsis
cmd module
example module

Jump to

Keyboard shortcuts

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