diff options
Diffstat (limited to 'vendor/github.com/jackc/pgx/v5/pgproto3/sasl_response.go')
| -rw-r--r-- | vendor/github.com/jackc/pgx/v5/pgproto3/sasl_response.go | 56 | 
1 files changed, 56 insertions, 0 deletions
| diff --git a/vendor/github.com/jackc/pgx/v5/pgproto3/sasl_response.go b/vendor/github.com/jackc/pgx/v5/pgproto3/sasl_response.go new file mode 100644 index 0000000..1b604c2 --- /dev/null +++ b/vendor/github.com/jackc/pgx/v5/pgproto3/sasl_response.go @@ -0,0 +1,56 @@ +package pgproto3 + +import ( +	"encoding/hex" +	"encoding/json" +) + +type SASLResponse struct { +	Data []byte +} + +// Frontend identifies this message as sendable by a PostgreSQL frontend. +func (*SASLResponse) Frontend() {} + +// Decode decodes src into dst. src must contain the complete message with the exception of the initial 1 byte message +// type identifier and 4 byte message length. +func (dst *SASLResponse) Decode(src []byte) error { +	*dst = SASLResponse{Data: src} +	return nil +} + +// Encode encodes src into dst. dst will include the 1 byte message type identifier and the 4 byte message length. +func (src *SASLResponse) Encode(dst []byte) ([]byte, error) { +	dst, sp := beginMessage(dst, 'p') +	dst = append(dst, src.Data...) +	return finishMessage(dst, sp) +} + +// MarshalJSON implements encoding/json.Marshaler. +func (src SASLResponse) MarshalJSON() ([]byte, error) { +	return json.Marshal(struct { +		Type string +		Data string +	}{ +		Type: "SASLResponse", +		Data: string(src.Data), +	}) +} + +// UnmarshalJSON implements encoding/json.Unmarshaler. +func (dst *SASLResponse) UnmarshalJSON(data []byte) error { +	var msg struct { +		Data string +	} +	if err := json.Unmarshal(data, &msg); err != nil { +		return err +	} +	if msg.Data != "" { +		decoded, err := hex.DecodeString(msg.Data) +		if err != nil { +			return err +		} +		dst.Data = decoded +	} +	return nil +} | 
