You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
40 lines
744 B
40 lines
744 B
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 |
|
}
|
|
|