Documentation
¶
Index ¶
- type BaseFilter
- func (f *BaseFilter) After(http.ResponseWriter, *http.Request)
- func (f *BaseFilter) Before(http.ResponseWriter, *http.Request)
- func (f *BaseFilter) ErrorHandler(w http.ResponseWriter, r *http.Request, err any)
- func (f *BaseFilter) Filter(http.ResponseWriter, *http.Request)
- func (f *BaseFilter) GeneratorDeferRunFunc(w http.ResponseWriter, r *http.Request) func()
- func (f *BaseFilter) GetBaseFilter() Filterer
- func (f *BaseFilter) GetNextFilter() *Filterer
- func (f *BaseFilter) GetSelfPointer() *Filterer
- func (f *BaseFilter) Info() string
- func (f *BaseFilter) Run(w http.ResponseWriter, r *http.Request, ...)
- func (f *BaseFilter) SetNextFilter(nf *Filterer)
- func (f *BaseFilter) SetSelfPointer(self *Filterer)
- type Filterer
- type OrderFilterer
- type OrderFilters
- func (filterOrder *OrderFilters) AppendFilter(filters ...Filterer)
- func (filterOrder *OrderFilters) GenerateFilteredHandleFunc(handleFunc func(http.ResponseWriter, *http.Request)) func(w http.ResponseWriter, r *http.Request)
- func (filterOrder *OrderFilters) GetFilterN(n int) Filterer
- func (filterOrder *OrderFilters) GetOrderFilters() []string
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type BaseFilter ¶
type BaseFilter struct { Name string // наименование фильтра // contains filtered or unexported fields }
BaseFilter - Базовая структура фильтра
func (*BaseFilter) After ¶
func (f *BaseFilter) After(http.ResponseWriter, *http.Request)
After - метод фильтра вызывающийся после Filter
func (*BaseFilter) Before ¶
func (f *BaseFilter) Before(http.ResponseWriter, *http.Request)
Before - метод фильтра вызывающийся до Filter
func (*BaseFilter) ErrorHandler ¶
func (f *BaseFilter) ErrorHandler(w http.ResponseWriter, r *http.Request, err any)
ErrorHandler - метод фильтра вызывающийся в случае ошибки на уровне фильтра
func (*BaseFilter) Filter ¶
func (f *BaseFilter) Filter(http.ResponseWriter, *http.Request)
Filter - основной метод фильтра
func (*BaseFilter) GeneratorDeferRunFunc ¶
func (f *BaseFilter) GeneratorDeferRunFunc(w http.ResponseWriter, r *http.Request) func()
GeneratorDeferRunFunc - метод создания базового дефера с обработкой паники с помощью вызова функции ErrorHandler
func (*BaseFilter) GetBaseFilter ¶
func (f *BaseFilter) GetBaseFilter() Filterer
GetBaseFilter - метод возразает родительскую структуру фильтра (BaseFilter)
func (*BaseFilter) GetNextFilter ¶
func (f *BaseFilter) GetNextFilter() *Filterer
GetNextFilter - метод получения текущего указателя на интерфейс след. фильтра nolint
func (*BaseFilter) GetSelfPointer ¶
func (f *BaseFilter) GetSelfPointer() *Filterer
GetSelfPointer - метод получения текущего указателя себя (указатель на интерфейс себя) nolint
func (*BaseFilter) Info ¶
func (f *BaseFilter) Info() string
Info - метод возращает информацию по фильтру
func (*BaseFilter) Run ¶
func (f *BaseFilter) Run(w http.ResponseWriter, r *http.Request, businessFunc func(http.ResponseWriter, *http.Request))
Run - метод стартующий вызов других методов фильтра
Example ¶
// Define some struct and methods @see upper // Build filter struct (better use gobeans way create obj @see here --> github.com/imperiuse/golib/gobeans ) CustomFilter := MyFirstCustomFilter{} CustomFilter.Name = "MyCustomFilter" CustomFilter2 := MyFirstCustomFilter{} CustomFilter2.Name = "MyCustomFilter2" // Get interface by pointer filter struct InterfaceCustomFilter := Filterer(&CustomFilter) // IMPORTANT! Better work with interface type of Filterer InterfaceCustomFilter2 := Filterer(&CustomFilter2) // IMPORTANT! Better work with interface type of Filterer InterfaceCustomFilter.SetSelfPointer(&InterfaceCustomFilter) // ATTENTION! ALWAYS SET THIS! Self pinter! IMPORTANT! InterfaceCustomFilter.SetNextFilter(&InterfaceCustomFilter2) // next filter pointer InterfaceCustomFilter2.SetSelfPointer(&InterfaceCustomFilter2) // ATTENTION! ALWAYS SET THIS! Self pinter! IMPORTANT! InterfaceCustomFilter2.SetNextFilter(nil) // next filter pointer // Let's test // Our child Info method InterfaceCustomFilter.Info() //print: [MyCustomFilter]: ... // Parent method InterfaceCustomFilter.GetBaseFilter().Info() //print: [BaseFilter] Before(): // Start filter var response http.ResponseWriter var request *http.Request bf := func(http.ResponseWriter, *http.Request) { return } // empty func InterfaceCustomFilter.Run(response, request, bf) // Run all Filter in rigth order // MyCustomFilter.Before()->MyCustomFilter.Filter()->MyCustomFilter.GetNextFilter() == return MyCustomFilter2 // MyCustomFilter2.Run()->MyCustomFilter2.Before()->MyCustomFilter2.Filter()->->MyCustomFilter.GetNextFilter() == nil // MyCustomFilter2.After()->MyCustomFilter.After()-> end.
Output:
func (*BaseFilter) SetNextFilter ¶
func (f *BaseFilter) SetNextFilter(nf *Filterer)
SetNextFilter - метод для установки указателя на интерфейс след. фильтра nolint
func (*BaseFilter) SetSelfPointer ¶
func (f *BaseFilter) SetSelfPointer(self *Filterer)
SetSelfPointer - метод для установки указателя на себя (указатель на интерфейс себя) nolint
type Filterer ¶
type Filterer interface { GetBaseFilter() Filterer // Метод получения родителя SetNextFilter(*Filterer) // Метод установки указателя на следующий фильтр (интерфейс фильтра) SetSelfPointer(*Filterer) // Метод установки указателя на себя (указатель на интерфейс себя) GetNextFilter() *Filterer // Метод получения указателя на следующий фильтр (интерфейс фильтра) GetSelfPointer() *Filterer // Метод получения указателя на себя (указатель на интерфейс себя) Info() string // Метод получения информации по фильтру Before(http.ResponseWriter, *http.Request) // 1 Вспомогательный метод - предварительный метод фильтра Filter(http.ResponseWriter, *http.Request) // Основной метод фильтра After(http.ResponseWriter, *http.Request) // 2 Вспомогательный метод - заключительный метод фильтра // Метод стартующий выполнение методов фильтра, в которой последовательно вызваются методы: // Before()->Filter()->GetNextFilter().Run()->After() // При возникновении ошибки вызывается метод ErrorHandler Run(http.ResponseWriter, *http.Request, func(http.ResponseWriter, *http.Request)) GeneratorDeferRunFunc(http.ResponseWriter, *http.Request) func() // Генератор Defer для функции Run ErrorHandler(http.ResponseWriter, *http.Request, any) // Метод вызывающийся в случае ошибки на уровне }
Filterer - базовый интерфейс фильтров
type OrderFilterer ¶
type OrderFilterer interface { // Get order of filters GetOrderFilters() []string // Append some new filter to chains. !ATTENTION! MODIFY FILTER ! SetNextFilterPointer() to each input Filter!!! AppendFilter(...Filterer) // Get N-й filter. 0 - First, ... n - Last GetFilterN(int) Filterer // Generate func - handle fun - filtered handle func of action GenerateFilteredHandleFunc(func(http.ResponseWriter, *http.Request)) func(http.ResponseWriter, *http.Request) }
OrderFilterer - order of filter interface
type OrderFilters ¶
type OrderFilters struct { Order []string // contains filtered or unexported fields }
OrderFilters - order of filter struct
func (*OrderFilters) AppendFilter ¶
func (filterOrder *OrderFilters) AppendFilter(filters ...Filterer)
AppendFilter - Append some new filter to chains. !ATTENTION! MODIFY FILTER ! SetNextFilterPointer() to each input Filter!!! @param
filters ...Filterer - some Filters interfaces that will chain of filters
Example ¶
ExampleOrderFilters_AppendFilter - an example of use OrderFilterer
// At the begin, we have coupled of filters in map of Filter // better use MapBeansType --> @see github.com/imperiuse/gobeans Type: MapBeansType mapOfFilterer := map[string]Filterer{"f1": &BaseFilter{}, "f2": &BaseFilter{}, "f3": &BaseFilter{}} // Create new Filter Order fOrder := OrderFilterer(&OrderFilters{[]string{"f1", "f2", "f3"}, nil}) // Configure Filterer to chain of Filters for _, nameFilter := range fOrder.GetOrderFilters() { fOrder.AppendFilter(mapOfFilterer[nameFilter]) } // Next, we have some business func, which we want "decorate" by own filters with special order define upper businesFunc := func(http.ResponseWriter, *http.Request) { return } // Do this! summaryFilteredBusinesFuncf := fOrder.GenerateFilteredHandleFunc(businesFunc) _ = summaryFilteredBusinesFuncf
Output:
func (*OrderFilters) GenerateFilteredHandleFunc ¶
func (filterOrder *OrderFilters) GenerateFilteredHandleFunc(handleFunc func(http.ResponseWriter, *http.Request)) func(w http.ResponseWriter, r *http.Request)
GenerateFilteredHandleFunc - Generate func - handle fun - filtered handle func of action
@param handleFunc func(http.ResponseWriter, *http.Request) - handle of action @return func(w http.ResponseWriter, r *http.Request) - total handle func
func (*OrderFilters) GetFilterN ¶
func (filterOrder *OrderFilters) GetFilterN(n int) Filterer
GetFilterN - Get N-й filter. 0 - First, ... n - Last @param
n int - number of filter in chain
func (*OrderFilters) GetOrderFilters ¶
func (filterOrder *OrderFilters) GetOrderFilters() []string
GetOrderFilters - Get order of filters @return
[]string - slice of string (name filters)