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