...
1 package pgproto3
2
3 import (
4 "bytes"
5 "encoding/binary"
6 "encoding/json"
7
8 "github.com/jackc/pgx/v5/internal/pgio"
9 )
10
11 type NotificationResponse struct {
12 PID uint32
13 Channel string
14 Payload string
15 }
16
17
18 func (*NotificationResponse) Backend() {}
19
20
21
22 func (dst *NotificationResponse) Decode(src []byte) error {
23 buf := bytes.NewBuffer(src)
24
25 if buf.Len() < 4 {
26 return &invalidMessageFormatErr{messageType: "NotificationResponse", details: "too short"}
27 }
28
29 pid := binary.BigEndian.Uint32(buf.Next(4))
30
31 b, err := buf.ReadBytes(0)
32 if err != nil {
33 return err
34 }
35 channel := string(b[:len(b)-1])
36
37 b, err = buf.ReadBytes(0)
38 if err != nil {
39 return err
40 }
41 payload := string(b[:len(b)-1])
42
43 *dst = NotificationResponse{PID: pid, Channel: channel, Payload: payload}
44 return nil
45 }
46
47
48 func (src *NotificationResponse) Encode(dst []byte) ([]byte, error) {
49 dst, sp := beginMessage(dst, 'A')
50 dst = pgio.AppendUint32(dst, src.PID)
51 dst = append(dst, src.Channel...)
52 dst = append(dst, 0)
53 dst = append(dst, src.Payload...)
54 dst = append(dst, 0)
55 return finishMessage(dst, sp)
56 }
57
58
59 func (src NotificationResponse) MarshalJSON() ([]byte, error) {
60 return json.Marshal(struct {
61 Type string
62 PID uint32
63 Channel string
64 Payload string
65 }{
66 Type: "NotificationResponse",
67 PID: src.PID,
68 Channel: src.Channel,
69 Payload: src.Payload,
70 })
71 }
72
View as plain text