예제 #1
0
파일: format.go 프로젝트: h12w/kpax
func (format Format) unmarshalTime(field string) func([]byte) (time.Time, error) {
	switch format {
	case "json":
		return func(msg []byte) (time.Time, error) {
			m := make(map[string]interface{})
			if err := json.Unmarshal(msg, &m); err != nil {
				return time.Time{}, err
			}
			timeField, _ := m[field].(string)
			return parseTime(timeField)
		}
	case "url":
		return func(msg []byte) (time.Time, error) {
			values, err := url.ParseQuery(string(msg))
			if err != nil {
				return time.Time{}, err
			}
			return parseTime(values.Get(field))
		}
	case "msgpack":
		return func(msg []byte) (time.Time, error) {
			m := make(map[string]interface{})
			if err := msgpack.Unmarshal(msg, &m); err != nil {
				return time.Time{}, err
			}
			m = hexid.Restore(m).(map[string]interface{})
			return parseTime(m[field])
		}
	}
	return nil
}
예제 #2
0
파일: format.go 프로젝트: h12w/kpax
func (format Format) Sprint(value []byte) (string, error) {
	switch format {
	case MsgPackFormat:
		m := make(map[string]interface{})
		if err := msgpack.Unmarshal(value, &m); err != nil {
			break
		}
		buf, err := json.Marshal(hexid.Restore(m))
		if err != nil {
			return "", fmt.Errorf("fail to marshal %#v: %s", m, err.Error())
		}
		return string(buf), nil
	}
	return string(value), nil
}