12345678910111213141516171819202122232425262728293031323334353637383940 |
- 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
- }
|