Skip to content

Commit

Permalink
rearrange code
Browse files Browse the repository at this point in the history
  • Loading branch information
elonzh committed Oct 30, 2020
1 parent dc4d2e9 commit 4792986
Show file tree
Hide file tree
Showing 6 changed files with 112 additions and 85 deletions.
4 changes: 2 additions & 2 deletions cmd/trumpet/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import (

"github.com/gin-gonic/gin"

"github.com/elonzh/trumpet/transformers"
"github.com/elonzh/trumpet/transformers/builtins"
)

func main() {
Expand All @@ -23,7 +23,7 @@ func main() {
c.String(http.StatusBadRequest, err.Error())
return
}
transformer, ok := transformers.Get(transformerName)
transformer, ok := builtins.Get(transformerName)
if !ok {
c.String(http.StatusNotFound, "no such transformer `%s`", transformer)
return
Expand Down
76 changes: 0 additions & 76 deletions transformers/builtin.go

This file was deleted.

22 changes: 22 additions & 0 deletions transformers/builtins/builtin.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package builtins

import (
"log"

"github.com/elonzh/trumpet/transformers"
)

var ts = map[string]*transformers.Transformer{}

func register(t *transformers.Transformer) {
o, exists := ts[t.Name]
if exists {
log.Fatalf("%s already exists", o)
}
ts[t.Name] = t
}

func Get(name string) (*transformers.Transformer, bool) {
t, ok := ts[name]
return t, ok
}
27 changes: 27 additions & 0 deletions transformers/builtins/dingtalk_to_feishu.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package builtins

import (
"log"

"github.com/elonzh/trumpet/transformers"
)

var dingtalkToFeishu *transformers.Transformer

func init() {
name := "dingtalk_to_feishu.star"
src := `
def transform(raw):
origin_body = json.decode(raw)
msg_type = origin_body['msgtype']
body = {}
if msg_type == "text":
body = {"msg_type": "text", "content": {"text": origin_body["text"]["content"]}}
return json.encode(body)
`
dingtalkToFeishu, err := transformers.NewTransformer(name, src)
if err != nil {
log.Fatalf("error when init Transformer %s, %s", name, err)
}
register(dingtalkToFeishu)
}
27 changes: 27 additions & 0 deletions transformers/builtins/feishu_to_dingtalk.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package builtins

import (
"log"

"github.com/elonzh/trumpet/transformers"
)

var feishuToDingtalk *transformers.Transformer

func init() {
name := "feishu_to_dingtalk.star"
src := `
def transform(raw):
origin_body = json.decode(raw)
msg_type = origin_body['msg_type']
body = {}
if msg_type == "text":
body = {"msgtype": "text", "text": {"content": origin_body["content"]["text"]}}
return json.encode(body)
`
feishuToDingtalk, err := transformers.NewTransformer(name, src)
if err != nil {
log.Fatalf("error when init Transformer %s, %s", name, err)
}
register(feishuToDingtalk)
}
41 changes: 34 additions & 7 deletions transformers/model.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,23 +2,28 @@ package transformers

import (
"fmt"
"io/ioutil"
"path"
"strings"

"go.starlark.net/starlark"
"go.starlark.net/starlarkjson"
)

const transformFunctionName = "transform"
const (
FileSuffix = ".star"
transformFunctionName = "transform"
)

type Transformer struct {
name string
Name string
src interface{}
thread *starlark.Thread
transFunc starlark.Value
}

func (t *Transformer) String() string {
return fmt.Sprintf("Transformer{name: %s}", t.name)
return fmt.Sprintf("Transformer{Name: %s}", t.Name)
}

func (t *Transformer) Exec(raw string) (string, error) {
Expand All @@ -35,10 +40,10 @@ func (t *Transformer) Exec(raw string) (string, error) {
}

func NewTransformer(filename string, src interface{}) (*Transformer, error) {
if !strings.HasSuffix(filename, suffix) {
return nil, fmt.Errorf("filename %s has no suffix %s", filename, suffix)
if !strings.HasSuffix(filename, FileSuffix) {
return nil, fmt.Errorf("filename %s has no suffix %s", filename, FileSuffix)
}
name := strings.TrimSuffix(filename, suffix)
name := strings.TrimSuffix(filename, FileSuffix)
thread := &starlark.Thread{
Name: name,
}
Expand All @@ -54,10 +59,32 @@ func NewTransformer(filename string, src interface{}) (*Transformer, error) {
return nil, fmt.Errorf("transformer not found")
}
t := &Transformer{
name: name,
Name: name,
src: src,
thread: thread,
transFunc: transFunc,
}
return t, nil
}

func Load(dir string) (map[string]*Transformer, error) {
files, err := ioutil.ReadDir(dir)
if err != nil {
return nil, err
}
rv := make(map[string]*Transformer)
for _, f := range files {
if f.IsDir() {
continue
}
if strings.HasSuffix(f.Name(), FileSuffix) {
filename := path.Join(dir, f.Name())
t, err := NewTransformer(filename, nil)
if err != nil {
return nil, fmt.Errorf("error when load %s: %w", filename, err)
}
rv[t.Name] = t
}
}
return rv, nil
}

0 comments on commit 4792986

Please sign in to comment.