mirror of
https://github.com/eolinker/apinto
synced 2025-10-30 19:46:41 +08:00
80 lines
1.9 KiB
Go
80 lines
1.9 KiB
Go
/*
|
|
* Copyright (c) 2021. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
|
|
* Morbi non lorem porttitor neque feugiat blandit. Ut vitae ipsum eget quam lacinia accumsan.
|
|
* Etiam sed turpis ac ipsum condimentum fringilla. Maecenas magna.
|
|
* Proin dapibus sapien vel ante. Aliquam erat volutpat. Pellentesque sagittis ligula eget metus.
|
|
* Vestibulum commodo. Ut rhoncus gravida arcu.
|
|
*/
|
|
|
|
package router_http
|
|
|
|
import (
|
|
"sync"
|
|
|
|
http_service "github.com/eolinker/eosc/http-service"
|
|
|
|
"github.com/eolinker/goku/router"
|
|
"github.com/eolinker/goku/service"
|
|
)
|
|
|
|
var _ service.IRouterEndpoint = (*EndPoint)(nil)
|
|
|
|
//EndPoint 路由端点结构体
|
|
type EndPoint struct {
|
|
endpoint router.IEndPoint
|
|
|
|
headers []string
|
|
queries []string
|
|
once sync.Once
|
|
}
|
|
|
|
//Header 通过header的key返回对应指标值的checker
|
|
func (e *EndPoint) Header(name string) (http_service.Checker, bool) {
|
|
return e.endpoint.Get(toHeader(name))
|
|
}
|
|
|
|
//Query 通过query的key返回对应指标值的checker
|
|
func (e *EndPoint) Query(name string) (http_service.Checker, bool) {
|
|
return e.endpoint.Get(toQuery(name))
|
|
}
|
|
|
|
func (e *EndPoint) initCMD() {
|
|
e.once.Do(func() {
|
|
cs := e.endpoint.CMDs()
|
|
e.headers = make([]string, 0, len(cs))
|
|
e.queries = make([]string, 0, len(cs))
|
|
for _, c := range cs {
|
|
if h, yes := headerName(c); yes {
|
|
e.headers = append(e.headers, h)
|
|
continue
|
|
}
|
|
if q, yes := queryName(c); yes {
|
|
e.queries = append(e.queries, q)
|
|
}
|
|
}
|
|
})
|
|
|
|
}
|
|
|
|
//Headers 返回路由端点内header的指标key列表
|
|
func (e *EndPoint) Headers() []string {
|
|
e.initCMD()
|
|
return e.headers
|
|
}
|
|
|
|
//Queries 返回路由端点内query的指标key列表
|
|
func (e *EndPoint) Queries() []string {
|
|
e.initCMD()
|
|
return e.queries
|
|
}
|
|
|
|
//NewEndPoint 创建
|
|
func NewEndPoint(endpoint router.IEndPoint) *EndPoint {
|
|
return &EndPoint{endpoint: endpoint}
|
|
}
|
|
|
|
//Location 返回location指标的checker
|
|
func (e *EndPoint) Location() (http_service.Checker, bool) {
|
|
return e.endpoint.Get(cmdLocation)
|
|
}
|