| package sarama |
| |
| import ( |
| "fmt" |
| "time" |
| ) |
| |
| type Timestamp struct { |
| *time.Time |
| } |
| |
| func (t Timestamp) encode(pe packetEncoder) error { |
| timestamp := int64(-1) |
| |
| if !t.Before(time.Unix(0, 0)) { |
| timestamp = t.UnixNano() / int64(time.Millisecond) |
| } else if !t.IsZero() { |
| return PacketEncodingError{fmt.Sprintf("invalid timestamp (%v)", t)} |
| } |
| |
| pe.putInt64(timestamp) |
| return nil |
| } |
| |
| func (t Timestamp) decode(pd packetDecoder) error { |
| millis, err := pd.getInt64() |
| if err != nil { |
| return err |
| } |
| |
| // negative timestamps are invalid, in these cases we should return |
| // a zero time |
| timestamp := time.Time{} |
| if millis >= 0 { |
| timestamp = time.Unix(millis/1000, (millis%1000)*int64(time.Millisecond)) |
| } |
| |
| *t.Time = timestamp |
| return nil |
| } |