mirror of
https://github.com/alibaba/higress.git
synced 2026-05-30 23:57:28 +08:00
feat: Add traffic-editor plugin (#2825)
This commit is contained in:
64
plugins/wasm-go/extensions/traffic-editor/pkg/ref.go
Normal file
64
plugins/wasm-go/extensions/traffic-editor/pkg/ref.go
Normal file
@@ -0,0 +1,64 @@
|
||||
package pkg
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
|
||||
"github.com/tidwall/gjson"
|
||||
)
|
||||
|
||||
const (
|
||||
RefTypeRequestHeader = "request_header"
|
||||
RefTypeRequestQuery = "request_query"
|
||||
RefTypeResponseHeader = "response_header"
|
||||
)
|
||||
|
||||
var (
|
||||
refType2Stage = map[string]Stage{
|
||||
RefTypeRequestHeader: StageRequestHeaders,
|
||||
RefTypeRequestQuery: StageRequestHeaders,
|
||||
RefTypeResponseHeader: StageResponseHeaders,
|
||||
}
|
||||
)
|
||||
|
||||
type Ref struct {
|
||||
Type string `json:"type"`
|
||||
Name string `json:"name,omitempty"`
|
||||
|
||||
stage Stage
|
||||
}
|
||||
|
||||
func NewRef(json gjson.Result) (*Ref, error) {
|
||||
ref := &Ref{}
|
||||
|
||||
if t := json.Get("type").String(); t != "" {
|
||||
ref.Type = t
|
||||
} else {
|
||||
return nil, errors.New("missing type field")
|
||||
}
|
||||
|
||||
if _, ok := refType2Stage[ref.Type]; !ok {
|
||||
return nil, fmt.Errorf("unknown ref type: %s", ref.Type)
|
||||
}
|
||||
|
||||
if name := json.Get("name").String(); name != "" {
|
||||
ref.Name = name
|
||||
} else {
|
||||
return nil, errors.New("missing name field")
|
||||
}
|
||||
|
||||
return ref, nil
|
||||
}
|
||||
|
||||
func (r *Ref) GetStage() Stage {
|
||||
if r.stage == 0 {
|
||||
if stage, ok := refType2Stage[r.Type]; ok {
|
||||
r.stage = stage
|
||||
}
|
||||
}
|
||||
return r.stage
|
||||
}
|
||||
|
||||
func (r *Ref) String() string {
|
||||
return fmt.Sprintf("%s/%s", r.Type, r.Name)
|
||||
}
|
||||
Reference in New Issue
Block a user