代码拉取完成,页面将自动刷新
package courier
import (
"fmt"
"net/url"
"reflect"
)
// @deprecated
type OperatorMeta = OperatorFactory
func NewOperatorFactory(op Operator, last bool) *OperatorFactory {
opType := typeOfOperator(reflect.TypeOf(op))
if opType.Kind() != reflect.Struct {
panic(fmt.Errorf("operator must be a struct type, got %#v", op))
}
meta := &OperatorFactory{}
meta.IsLast = last
meta.Operator = op
if _, isOperatorWithoutOutput := op.(OperatorWithoutOutput); isOperatorWithoutOutput {
meta.NoOutput = true
}
meta.Type = typeOfOperator(reflect.TypeOf(op))
if operatorWithParams, ok := op.(OperatorWithParams); ok {
meta.Params = operatorWithParams.OperatorParams()
}
if ctxKey, ok := op.(ContextProvider); ok {
meta.ContextKey = ctxKey.ContextKey()
}
return meta
}
func typeOfOperator(tpe reflect.Type) reflect.Type {
for tpe.Kind() == reflect.Ptr {
return typeOfOperator(tpe.Elem())
}
return tpe
}
type OperatorFactory struct {
Type reflect.Type
ContextKey interface{}
NoOutput bool
Params url.Values
IsLast bool
Operator Operator
}
func (o *OperatorFactory) String() string {
if o.Params != nil {
return o.Type.String() + "?" + o.Params.Encode()
}
return o.Type.String()
}
func (o *OperatorFactory) New() Operator {
var op Operator
if operatorNewer, ok := o.Operator.(OperatorNewer); ok {
op = operatorNewer.New()
} else {
op = reflect.New(o.Type).Interface().(Operator)
}
if operatorInit, ok := op.(OperatorInit); ok {
operatorInit.InitFrom(o.Operator)
}
if defaultsSetter, ok := op.(DefaultsSetter); ok {
defaultsSetter.SetDefaults()
}
return op
}
type EmptyOperator struct {
OperatorWithoutOutput
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。