Ai
1 Star 0 Fork 0

go-genie/courier

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
operator.go 1.65 KB
一键复制 编辑 原始数据 按行查看 历史
文兄 提交于 2025-05-29 10:53 +08:00 . init
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
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/go-genie/courier.git
git@gitee.com:go-genie/courier.git
go-genie
courier
courier
v1.0.3

搜索帮助