nimo-shake/protocal/mtype_converter.go (33 lines of code) (raw):
package protocal
import (
"fmt"
"github.com/aws/aws-sdk-go/service/dynamodb"
"github.com/aws/aws-sdk-go/service/dynamodb/dynamodbattribute"
LOG "github.com/vinllen/log4go"
conf "nimo-shake/configure"
"time"
)
type MTypeConverter struct {
}
func (tc *MTypeConverter) Run(input map[string]*dynamodb.AttributeValue) (interface{}, error) {
funcStartT := time.Now()
outLen := 0
for key, value := range input {
outLen = outLen + len(key) + len(value.String())
}
out := new(interface{})
if err := dynamodbattribute.UnmarshalMap(input, out); err == nil {
for key, value := range (*out).(map[string]interface {}) {
if key == "_id" {
delete((*out).(map[string]interface {}), key)
((*out).(map[string]interface {}))[conf.ConvertIdFunc(key)] = value
}
}
LOG.Debug("Run_func input[%v] out[%v] out_len[%v] duration[%v]",
input, *out, outLen, time.Since(funcStartT))
return RawData{outLen, *out}, nil
} else {
LOG.Debug("Run_func input[%v] out[%v] err[%v]", input, *out, err)
}
return RawData{}, fmt.Errorf("parse failed, return nil")
}