Платформа ЦРНП "Мирокод" для разработки проектов
https://git.mirocod.ru
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.
45 lines
929 B
45 lines
929 B
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 |
|
}
|
|
|