github.com/l3x/learn-fp-go@v0.0.0-20171228022418-7639825d0b71/4-purely-functional/ch10-monads/01_car_steps/src/workflow/toolbox.go (about) 1 package workflow 2 3 import ( 4 "encoding/base64" 5 "encoding/json" 6 "time" 7 ) 8 9 func Base64ToBytes(d Data) Monad { 10 dString := d.(string) 11 return func(e error) (Data, error) { 12 return base64.StdEncoding.DecodeString(dString) 13 } 14 } 15 16 func BytesToData(d Data) Monad { 17 dBytes := d.([]byte) 18 return func(e error) (Data, error) { 19 data := &CarData{} 20 err := json.Unmarshal(dBytes, &data) 21 return data, err 22 } 23 } 24 25 func TimestampData(d Data) Monad { 26 data := d.(*CarData) 27 return func(e error) (Data, error) { 28 data.Timestamp = time.Now().Format("20060102150405") 29 return data, nil 30 } 31 } 32 33 func DataToJson(d Data) Monad { 34 data := d.(*CarData) 35 return func(e error) (Data, error) { 36 car, err := json.Marshal(data) 37 return string(car), err 38 } 39 } 40