package proto import ( "encoding/binary" "io" "github.com/juju/errors" ) // RequestHeader is for tso request proto. type RequestHeader struct { } // Timestamp is for tso timestamp. type Timestamp struct { Physical int64 Logical int64 } // Response is for tso reponse proto. type Response struct { Timestamp } // Encode encodes repsonse proto into w. func (res *Response) Encode(w io.Writer) error { var buf [16]byte binary.BigEndian.PutUint64(buf[0:8], uint64(res.Physical)) binary.BigEndian.PutUint64(buf[8:16], uint64(res.Logical)) _, err := w.Write(buf[0:16]) return errors.Trace(err) } // Decode decodes reponse proto from r. func (res *Response) Decode(r io.Reader) error { var buf [16]byte _, err := io.ReadFull(r, buf[0:16]) if err != nil { return errors.Trace(err) } res.Physical = int64(binary.BigEndian.Uint64(buf[0:8])) res.Logical = int64(binary.BigEndian.Uint64(buf[8:16])) return nil }