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 }