...

Source file src/github.com/jackc/pgx/v5/pgproto3/notification_response.go

Documentation: github.com/jackc/pgx/v5/pgproto3

     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  // Backend identifies this message as sendable by the PostgreSQL backend.
    18  func (*NotificationResponse) Backend() {}
    19  
    20  // Decode decodes src into dst. src must contain the complete message with the exception of the initial 1 byte message
    21  // type identifier and 4 byte message length.
    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  // Encode encodes src into dst. dst will include the 1 byte message type identifier and the 4 byte message length.
    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  // MarshalJSON implements encoding/json.Marshaler.
    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