package pgproto3
import (
"bytes"
"encoding/hex"
"encoding/json"
"errors"
"github.com/jackc/pgx/v5/internal/pgio"
)
type SASLInitialResponse struct {
AuthMechanism string
Data []byte
}
func (*SASLInitialResponse ) Frontend () {}
func (dst *SASLInitialResponse ) Decode (src []byte ) error {
*dst = SASLInitialResponse {}
rp := 0
idx := bytes .IndexByte (src , 0 )
if idx < 0 {
return errors .New ("invalid SASLInitialResponse" )
}
dst .AuthMechanism = string (src [rp :idx ])
rp = idx + 1
rp += 4
dst .Data = src [rp :]
return nil
}
func (src *SASLInitialResponse ) Encode (dst []byte ) []byte {
dst = append (dst , 'p' )
sp := len (dst )
dst = pgio .AppendInt32 (dst , -1 )
dst = append (dst , []byte (src .AuthMechanism )...)
dst = append (dst , 0 )
dst = pgio .AppendInt32 (dst , int32 (len (src .Data )))
dst = append (dst , src .Data ...)
pgio .SetInt32 (dst [sp :], int32 (len (dst [sp :])))
return dst
}
func (src SASLInitialResponse ) MarshalJSON () ([]byte , error ) {
return json .Marshal (struct {
Type string
AuthMechanism string
Data string
}{
Type : "SASLInitialResponse" ,
AuthMechanism : src .AuthMechanism ,
Data : string (src .Data ),
})
}
func (dst *SASLInitialResponse ) UnmarshalJSON (data []byte ) error {
if string (data ) == "null" {
return nil
}
var msg struct {
AuthMechanism string
Data string
}
if err := json .Unmarshal (data , &msg ); err != nil {
return err
}
dst .AuthMechanism = msg .AuthMechanism
if msg .Data != "" {
decoded , err := hex .DecodeString (msg .Data )
if err != nil {
return err
}
dst .Data = decoded
}
return nil
}
The pages are generated with Golds v0.6.7 . (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu .
PR and bug reports are welcome and can be submitted to the issue list .
Please follow @Go100and1 (reachable from the left QR code) to get the latest news of Golds .