Ai
1 Star 0 Fork 1

go-genie/httptransport

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
flatten_params.go 1.23 KB
一键复制 编辑 原始数据 按行查看 历史
文兄 提交于 2025-06-17 15:56 +08:00 . init
package transformers
import (
"context"
"reflect"
reflectx "gitee.com/go-genie/xx/reflect"
"gitee.com/go-genie/httptransport/validator"
typesx "gitee.com/go-genie/xx/types"
)
type FlattenParams struct {
Parameters []RequestParameter
}
type TransformerAndOption struct {
Transformer
Option TransformerOption
}
func (FlattenParams) NewValidator(ctx context.Context, typ typesx.Type) (validator.Validator, error) {
p := &FlattenParams{}
err := p.CollectParams(ctx, typ)
return p, err
}
func (FlattenParams) String() string {
return "@flatten"
}
func (params *FlattenParams) Validate(v interface{}) error {
rv, ok := v.(reflect.Value)
if !ok {
rv = reflect.ValueOf(v)
}
errSet := validator.NewErrorSet()
rv = reflectx.Indirect(rv)
for i := range params.Parameters {
p := params.Parameters[i]
fieldValue := p.FieldValue(rv)
if p.Validator != nil {
if err := p.Validator.Validate(fieldValue); err != nil {
errSet.AddErr(err, p.Name)
}
}
}
return errSet.Err()
}
func (params *FlattenParams) CollectParams(ctx context.Context, typ typesx.Type) error {
err := EachRequestParameter(
ctx, typesx.Deref(typ), func(rp *RequestParameter) {
params.Parameters = append(params.Parameters, *rp)
},
)
return err
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/go-genie/httptransport.git
git@gitee.com:go-genie/httptransport.git
go-genie
httptransport
httptransport
v1.1.4

搜索帮助