File: timestamp.go

package info (click to toggle)
golang-github-shopify-sarama 1.22.1-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, bullseye, forky, sid, trixie
  • size: 1,728 kB
  • sloc: sh: 112; makefile: 43
file content (40 lines) | stat: -rw-r--r-- 744 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
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
}