1package pgproto3
2
3import (
4	"bytes"
5	"encoding/json"
6
7	"github.com/jackc/pgx/pgio"
8)
9
10type PasswordMessage struct {
11	Password string
12}
13
14func (*PasswordMessage) Frontend() {}
15
16func (dst *PasswordMessage) Decode(src []byte) error {
17	buf := bytes.NewBuffer(src)
18
19	b, err := buf.ReadBytes(0)
20	if err != nil {
21		return err
22	}
23	dst.Password = string(b[:len(b)-1])
24
25	return nil
26}
27
28func (src *PasswordMessage) Encode(dst []byte) []byte {
29	dst = append(dst, 'p')
30	dst = pgio.AppendInt32(dst, int32(4+len(src.Password)+1))
31
32	dst = append(dst, src.Password...)
33	dst = append(dst, 0)
34
35	return dst
36}
37
38func (src *PasswordMessage) MarshalJSON() ([]byte, error) {
39	return json.Marshal(struct {
40		Type     string
41		Password string
42	}{
43		Type:     "PasswordMessage",
44		Password: src.Password,
45	})
46}
47