summaryrefslogtreecommitdiff
path: root/filter/str/string.go
diff options
context:
space:
mode:
Diffstat (limited to 'filter/str/string.go')
-rw-r--r--filter/str/string.go56
1 files changed, 56 insertions, 0 deletions
diff --git a/filter/str/string.go b/filter/str/string.go
new file mode 100644
index 0000000..0ae407d
--- /dev/null
+++ b/filter/str/string.go
@@ -0,0 +1,56 @@
+package str
+
+import (
+ "bytes"
+ "encoding/json"
+ "fmt"
+ "io"
+
+ "github.com/Shugyousha/stasher/work"
+)
+
+type StringFilter struct {
+ FilterFuncMap map[string]func(string) string
+}
+
+func New(ffmap map[string]func(string) string) *StringFilter {
+ return &StringFilter{FilterFuncMap: ffmap}
+}
+
+func (f *StringFilter) Filter(w *work.Work) *work.Work {
+ dec := json.NewDecoder(bytes.NewReader(w.Data))
+ jm := make(map[string]string, 10)
+
+ err := dec.Decode(&jm)
+ if err == io.EOF {
+ fmt.Printf("EOF jm: %v\n", jm)
+ return w
+ }
+ if err != nil {
+ fmt.Printf("Error when decoding JSON: %q\n", err)
+ w.Err = err
+ return w
+ }
+
+ changed := false
+ for field, ff := range f.FilterFuncMap {
+ str, ok := jm[field]
+ if !ok {
+ continue
+ }
+
+ jm[field] = ff(str)
+ changed = true
+ }
+ if changed {
+ bs, err := json.Marshal(jm)
+ if err != nil {
+ fmt.Printf("Error when marshalling JSON: %q\n", err)
+ w.Err = err
+ } else {
+ w.Data = bs
+ }
+ }
+
+ return w
+}