template

package module
v0.0.0-...-6ed8f11 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 15, 2026 License: MIT Imports: 24 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var BuiltinFuncMap = template.FuncMap{
	"int": strconv.Atoi,
	"str": strconv.Itoa,
	"reg": func(pattern string, s string) (string, error) {
		expr, err := regexp.Compile(pattern)
		if err != nil {
			return "", err
		}
		return expr.FindString(s), nil
	},
	"type": func(v any) string {
		return fmt.Sprintf("%T", v)
	},
	"json": func(v any) (string, error) {
		b, err := json.Marshal(v)
		return string(b), err
	},
	"gjson": func(path, json string) (any, error) {
		if r := gjson.Get(json, path); r.Exists() {
			return r.Value(), nil
		}
		return nil, fmt.Errorf("path not found: %q", path)
	},
	"base64encode": func(s string) string {
		return base64.StdEncoding.EncodeToString([]byte(s))
	},
	"base64decode": func(s string) (string, error) {
		data, err := base64.StdEncoding.DecodeString(s)
		if err != nil {
			return "", err
		}
		return string(data), nil
	},
	"plaintext": Plaintext,
}

BuiltinFuncMap 内置函数

View Source
var EnvPrefix string = "$env."

EnvPrefix 环境变量前缀

View Source
var ErrEmptyVersion = errors.New("req/template: Version cannot be empty")

ErrEmptyVersion 版本号不能为空

View Source
var ErrKeyNotFound = errors.New("key not found")
View Source
var ErrNilDefaultLoader = errors.New("req/template.Load: DefaultLoader is nil")

ErrNilDefaultLoader 默认加载器为空错误

View Source
var ErrTemplateCycle = errors.New("req/template.Load: template cycle not allowed")

ErrTemplateCycle 模板引用循环

View Source
var SetPrefix string = "$set."

SetPrefix 设置变量前缀

Functions

func Bind

func Bind(tmpl *template.Template, setter *OrderedMap, getter ...*OrderedMap)

Bind 在模板上绑定环境变量函数

func NewTemplate

func NewTemplate(name string) *template.Template

func Plaintext

func Plaintext(text string) (string, error)

Plaintext 获取纯净文本

func Range

func Range(tmpl *template.Template, data any, ranger, setter *OrderedMap, getter ...*OrderedMap) error

Range 遍历更新模板

func ToBuffer

func ToBuffer(tmpl *template.Template, text string, data any) (*bytes.Buffer, error)

ToBuffer 将模板转为缓冲区

func ToString

func ToString(tmpl *template.Template, text string, data any, getter ...*OrderedMap) (string, error)

ToString 将模板转为字符串

func TrimEnvPrefix

func TrimEnvPrefix(s string) (string, bool)

TrimEnvPrefix 修剪环境变量前缀

func TrimSetPrefix

func TrimSetPrefix(s string) (string, bool)

TrimSetPrefix 修剪设置变量前缀

Types

type CycleError

type CycleError struct {
	Err   error    // 包裹错误
	Cycle []string // 循环链
}

CycleError 循环引用错误

func (*CycleError) Error

func (e *CycleError) Error() string

type DatabaseLoader

type DatabaseLoader struct {
	*gorm.DB
}

DatabaseLoader 数据库加载器,可以查询数据库 steps 表加载模板

func (DatabaseLoader) Load

func (d DatabaseLoader) Load(uses string, tmpl *Template) error

type FileLoader

type FileLoader struct{}

FileLoader 文件加载器,可以用 JSON 和 YAML 文件加载模板

func (FileLoader) Load

func (FileLoader) Load(uses string, tmpl *Template) error

type Getter

type Getter []*OrderedMap

Getter 按顺序从有序映射中查找键值

func (Getter) Get

func (g Getter) Get(key string) (any, error)

Get 返回第一个找到键的有序映射中的值,如果都没有会返回错误

type Loader

type Loader interface {
	Load(uses string, tmpl *Template) error
}

Loader 用于加载模板

var DefaultLoader Loader

DefaultLoader 默认加载器

type OrderedMap

type OrderedMap struct {
	// contains filtered or unexported fields
}

OrderedMap 有序映射

func (*OrderedMap) Clone

func (o *OrderedMap) Clone() *OrderedMap

Clone 复制映射

func (*OrderedMap) Del

func (o *OrderedMap) Del(key string)

Del 删除键值对

func (*OrderedMap) Get

func (o *OrderedMap) Get(key string) (value any, exists bool)

Get 获取值

func (*OrderedMap) Iterate

func (o *OrderedMap) Iterate(yield func(key string, value any) bool)

Iterate 按顺序遍历键值对,返回 false 时停止迭代

func (*OrderedMap) Keys

func (o *OrderedMap) Keys() (keys []string)

Keys 获取所有键

func (*OrderedMap) Len

func (o *OrderedMap) Len() (i int)

Len 获取键值对个数

func (*OrderedMap) Map

func (o *OrderedMap) Map() (m map[string]any)

Map 获取无序映射

func (*OrderedMap) MarshalJSON

func (o *OrderedMap) MarshalJSON() ([]byte, error)

MarshalJSON 序列化 JSON

func (*OrderedMap) MarshalYAML

func (o *OrderedMap) MarshalYAML() (any, error)

MarshalYAML 序列化 YAML

func (*OrderedMap) Replace

func (o *OrderedMap) Replace(f func(key string, value any) (newValue any, shouldReplace bool))

Replace 替换值

func (*OrderedMap) Set

func (o *OrderedMap) Set(key string, value any)

Set 设置键值对,它会检查键是否存在,存在则移动到末尾,不存在则追加到末尾,并更新值

func (*OrderedMap) String

func (o *OrderedMap) String() string

String 打印映射

func (*OrderedMap) UnmarshalJSON

func (o *OrderedMap) UnmarshalJSON(b []byte) error

UnmarshalJSON 反序列化 JSON

func (*OrderedMap) UnmarshalYAML

func (o *OrderedMap) UnmarshalYAML(node *yaml.Node) error

UnmarshalYAML 反序列化 YAML

func (*OrderedMap) Update

func (o *OrderedMap) Update(n *OrderedMap) *OrderedMap

Update 更新映射,如果入参映射中的键已经存在,会将其移动到末尾,并且覆盖它的值

func (*OrderedMap) Values

func (o *OrderedMap) Values() (values []any)

Values 获取所有值

type Request

type Request struct {
	Tmpl   *template.Template
	Data   any
	Step   *Step
	Getter Getter
}

Request 用模板、步骤和数据发送请求

func (*Request) Body

func (*Request) Cookie

func (r *Request) Cookie(req *http.Request, _ reflect.Value, _ []reflect.StructField) (err error)

func (*Request) Header

func (r *Request) Header(req *http.Request, _ reflect.Value, _ []reflect.StructField) error

func (*Request) Method

func (r *Request) Method() string

func (*Request) RawURL

func (r *Request) RawURL() string

type Step

type Step struct {
	Template   `yaml:",inline"`
	TemplateID uint64         `json:"-"       yaml:"-"`                             // 模板外键
	If         string         `json:"if"      yaml:"if"`                            // 是否使用
	Uses       string         `json:"uses"    yaml:"uses"`                          // 使用模板
	Method     string         `json:"method"  yaml:"method"`                        // 请求方法
	URL        string         `json:"url"     yaml:"url"`                           // 请求地址
	Body       any            `json:"body"    yaml:"body"   gorm:"serializer:json"` // 请求内容
	Cookie     any            `json:"cookie"  yaml:"cookie" gorm:"serializer:json"` // 请求 Cookie
	Header     map[string]any `json:"header"  yaml:"header" gorm:"serializer:json"` // 请求头部
}

Step 步骤

func (Step) Do

func (s Step) Do(ctx context.Context, env *OrderedMap, tmpl *template.Template, data any) (err error)

Do 执行步骤,如果步骤有 URL 则发送请求,如果有 Uses 则加载并执行子模板,否则视为起始模板

func (Step) Load

func (s Step) Load(ctx context.Context, env *OrderedMap, tmpl *template.Template, data any) (err error)

Load 用步骤加载子模板

func (Step) Request

func (s Step) Request(ctx context.Context, env *OrderedMap, tmpl *template.Template, data any) (err error)

Request 用步骤发送请求

func (Step) StepName

func (s Step) StepName() string

StepName 打印单行步骤信息

func (Step) String

func (s Step) String() string

String 打印多行步骤信息,包含子步骤

type Template

type Template struct {
	ID      uint64      `json:"-"           yaml:"-"         gorm:"primaryKey;autoIncrement"`  // 模板标识符
	Author  string      `json:"author"      yaml:"author"    gorm:"index:idx_uses,priority:1"` // 模板作者
	Name    string      `json:"name"        yaml:"name"      gorm:"index:idx_uses,priority:2"` // 模板名称
	Version Version     `json:"version"     yaml:"version"   gorm:"embedded"`                  // 模板版本
	Desc    string      `json:"desc"        yaml:"desc"`                                       // 模板介绍
	Steps   []Step      `json:"steps"       yaml:"steps"     gorm:"foreignkey:TemplateID"`     // 模板步骤
	Env     *OrderedMap `json:"env"         yaml:"env"       gorm:"serializer:json"`           // 模板环境
	Output  *OrderedMap `json:"output"      yaml:"output"    gorm:"serializer:json"`           // 导出变量
}

Template 模板

func Load

func Load(uses string) (Template, error)

Load 使用默认加载器加载模板,会检查是否存在引用循环

func (*Template) Do

func (t *Template) Do(ctx context.Context, env *OrderedMap, tmpl *template.Template, data any) error

Do 执行子步骤

func (Template) StepsString

func (t Template) StepsString() string

StepsString 打印多行子步骤信息

func (Template) String

func (t Template) String() (s string)

String 打印模板全部信息

func (Template) TemplateName

func (t Template) TemplateName() string

TemplateName 打印单行模板信息

type TemplateError

type TemplateError OrderedMap

TemplateError 模板错误

func (*TemplateError) Add

func (t *TemplateError) Add(key string, err error) *TemplateError

Add 添加错误

func (*TemplateError) Error

func (t *TemplateError) Error() string

Error 获取错误信息

func (*TemplateError) Len

func (t *TemplateError) Len() int

Len 获取错误个数

func (*TemplateError) MarshalJSON

func (t *TemplateError) MarshalJSON() ([]byte, error)

MarshalJSON 序列化 JSON

func (*TemplateError) MarshalYAML

func (t *TemplateError) MarshalYAML() (any, error)

MarshalYAML 序列化 YAML

func (*TemplateError) UnmarshalJSON

func (t *TemplateError) UnmarshalJSON(b []byte) error

UnmarshalJSON 反序列化 JSON

func (*TemplateError) UnmarshalYAML

func (t *TemplateError) UnmarshalYAML(node *yaml.Node) error

UnmarshalYAML 反序列化 YAML

func (*TemplateError) Unwrap

func (t *TemplateError) Unwrap() error

Unwrap 获取解包错误

func (*TemplateError) WrapError

func (t *TemplateError) WrapError()

WrapError 将错误包装成包含更多信息的结构体

type Version

type Version struct {
	// 主版本号,当你做了不兼容的 API 修改时递增
	Major *uint64 `gorm:"index:idx_uses,priority:3"`

	// 次版本号,当你做了向下兼容的功能性新增时递增
	Minor *uint64 `gorm:"index:idx_uses,priority:4"`

	// 修订号,当你做了向下兼容的问题修正时递增
	Patch *uint64 `gorm:"index:idx_uses,priority:5"`
}

Version 版本号

func (Version) MarshalJSON

func (v Version) MarshalJSON() ([]byte, error)

MarshalJSON 序列化 JSON

func (Version) MarshalText

func (v Version) MarshalText() ([]byte, error)

MarshalText 序列化文本

func (Version) MarshalYAML

func (v Version) MarshalYAML() (any, error)

MarshalYAML 序列化 YAML

func (*Version) Match

func (v *Version) Match(tx *gorm.DB) *gorm.DB

Match 用于 GORM Scopes 动态筛选版本号

func (Version) String

func (v Version) String() string

String 打印版本信息

func (*Version) UnmarshalJSON

func (v *Version) UnmarshalJSON(b []byte) error

UnmarshalJSON 反序列化 JSON

func (*Version) UnmarshalText

func (v *Version) UnmarshalText(data []byte) (err error)

UnmarshalText 反序列化文本

func (*Version) UnmarshalYAML

func (v *Version) UnmarshalYAML(value *yaml.Node) error

UnmarshalYAML 反序列化 YAML

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL