package pgproto3
import (
"bytes"
"encoding/binary"
"encoding/json"
"strconv"
)
type ErrorResponse struct {
Severity string
SeverityUnlocalized string
Code string
Message string
Detail string
Hint string
Position int32
InternalPosition int32
InternalQuery string
Where string
SchemaName string
TableName string
ColumnName string
DataTypeName string
ConstraintName string
File string
Line int32
Routine string
UnknownFields map [byte ]string
}
func (*ErrorResponse ) Backend () {}
func (dst *ErrorResponse ) Decode (src []byte ) error {
*dst = ErrorResponse {}
buf := bytes .NewBuffer (src )
for {
k , err := buf .ReadByte ()
if err != nil {
return err
}
if k == 0 {
break
}
vb , err := buf .ReadBytes (0 )
if err != nil {
return err
}
v := string (vb [:len (vb )-1 ])
switch k {
case 'S' :
dst .Severity = v
case 'V' :
dst .SeverityUnlocalized = v
case 'C' :
dst .Code = v
case 'M' :
dst .Message = v
case 'D' :
dst .Detail = v
case 'H' :
dst .Hint = v
case 'P' :
s := v
n , _ := strconv .ParseInt (s , 10 , 32 )
dst .Position = int32 (n )
case 'p' :
s := v
n , _ := strconv .ParseInt (s , 10 , 32 )
dst .InternalPosition = int32 (n )
case 'q' :
dst .InternalQuery = v
case 'W' :
dst .Where = v
case 's' :
dst .SchemaName = v
case 't' :
dst .TableName = v
case 'c' :
dst .ColumnName = v
case 'd' :
dst .DataTypeName = v
case 'n' :
dst .ConstraintName = v
case 'F' :
dst .File = v
case 'L' :
s := v
n , _ := strconv .ParseInt (s , 10 , 32 )
dst .Line = int32 (n )
case 'R' :
dst .Routine = v
default :
if dst .UnknownFields == nil {
dst .UnknownFields = make (map [byte ]string )
}
dst .UnknownFields [k ] = v
}
}
return nil
}
func (src *ErrorResponse ) Encode (dst []byte ) []byte {
return append (dst , src .marshalBinary ('E' )...)
}
func (src *ErrorResponse ) marshalBinary (typeByte byte ) []byte {
var bigEndian BigEndianBuf
buf := &bytes .Buffer {}
buf .WriteByte (typeByte )
buf .Write (bigEndian .Uint32 (0 ))
if src .Severity != "" {
buf .WriteByte ('S' )
buf .WriteString (src .Severity )
buf .WriteByte (0 )
}
if src .SeverityUnlocalized != "" {
buf .WriteByte ('V' )
buf .WriteString (src .SeverityUnlocalized )
buf .WriteByte (0 )
}
if src .Code != "" {
buf .WriteByte ('C' )
buf .WriteString (src .Code )
buf .WriteByte (0 )
}
if src .Message != "" {
buf .WriteByte ('M' )
buf .WriteString (src .Message )
buf .WriteByte (0 )
}
if src .Detail != "" {
buf .WriteByte ('D' )
buf .WriteString (src .Detail )
buf .WriteByte (0 )
}
if src .Hint != "" {
buf .WriteByte ('H' )
buf .WriteString (src .Hint )
buf .WriteByte (0 )
}
if src .Position != 0 {
buf .WriteByte ('P' )
buf .WriteString (strconv .Itoa (int (src .Position )))
buf .WriteByte (0 )
}
if src .InternalPosition != 0 {
buf .WriteByte ('p' )
buf .WriteString (strconv .Itoa (int (src .InternalPosition )))
buf .WriteByte (0 )
}
if src .InternalQuery != "" {
buf .WriteByte ('q' )
buf .WriteString (src .InternalQuery )
buf .WriteByte (0 )
}
if src .Where != "" {
buf .WriteByte ('W' )
buf .WriteString (src .Where )
buf .WriteByte (0 )
}
if src .SchemaName != "" {
buf .WriteByte ('s' )
buf .WriteString (src .SchemaName )
buf .WriteByte (0 )
}
if src .TableName != "" {
buf .WriteByte ('t' )
buf .WriteString (src .TableName )
buf .WriteByte (0 )
}
if src .ColumnName != "" {
buf .WriteByte ('c' )
buf .WriteString (src .ColumnName )
buf .WriteByte (0 )
}
if src .DataTypeName != "" {
buf .WriteByte ('d' )
buf .WriteString (src .DataTypeName )
buf .WriteByte (0 )
}
if src .ConstraintName != "" {
buf .WriteByte ('n' )
buf .WriteString (src .ConstraintName )
buf .WriteByte (0 )
}
if src .File != "" {
buf .WriteByte ('F' )
buf .WriteString (src .File )
buf .WriteByte (0 )
}
if src .Line != 0 {
buf .WriteByte ('L' )
buf .WriteString (strconv .Itoa (int (src .Line )))
buf .WriteByte (0 )
}
if src .Routine != "" {
buf .WriteByte ('R' )
buf .WriteString (src .Routine )
buf .WriteByte (0 )
}
for k , v := range src .UnknownFields {
buf .WriteByte (k )
buf .WriteString (v )
buf .WriteByte (0 )
}
buf .WriteByte (0 )
binary .BigEndian .PutUint32 (buf .Bytes ()[1 :5 ], uint32 (buf .Len ()-1 ))
return buf .Bytes ()
}
func (src ErrorResponse ) MarshalJSON () ([]byte , error ) {
return json .Marshal (struct {
Type string
Severity string
SeverityUnlocalized string
Code string
Message string
Detail string
Hint string
Position int32
InternalPosition int32
InternalQuery string
Where string
SchemaName string
TableName string
ColumnName string
DataTypeName string
ConstraintName string
File string
Line int32
Routine string
UnknownFields map [byte ]string
}{
Type : "ErrorResponse" ,
Severity : src .Severity ,
SeverityUnlocalized : src .SeverityUnlocalized ,
Code : src .Code ,
Message : src .Message ,
Detail : src .Detail ,
Hint : src .Hint ,
Position : src .Position ,
InternalPosition : src .InternalPosition ,
InternalQuery : src .InternalQuery ,
Where : src .Where ,
SchemaName : src .SchemaName ,
TableName : src .TableName ,
ColumnName : src .ColumnName ,
DataTypeName : src .DataTypeName ,
ConstraintName : src .ConstraintName ,
File : src .File ,
Line : src .Line ,
Routine : src .Routine ,
UnknownFields : src .UnknownFields ,
})
}
func (dst *ErrorResponse ) UnmarshalJSON (data []byte ) error {
if string (data ) == "null" {
return nil
}
var msg struct {
Type string
Severity string
SeverityUnlocalized string
Code string
Message string
Detail string
Hint string
Position int32
InternalPosition int32
InternalQuery string
Where string
SchemaName string
TableName string
ColumnName string
DataTypeName string
ConstraintName string
File string
Line int32
Routine string
UnknownFields map [byte ]string
}
if err := json .Unmarshal (data , &msg ); err != nil {
return err
}
dst .Severity = msg .Severity
dst .SeverityUnlocalized = msg .SeverityUnlocalized
dst .Code = msg .Code
dst .Message = msg .Message
dst .Detail = msg .Detail
dst .Hint = msg .Hint
dst .Position = msg .Position
dst .InternalPosition = msg .InternalPosition
dst .InternalQuery = msg .InternalQuery
dst .Where = msg .Where
dst .SchemaName = msg .SchemaName
dst .TableName = msg .TableName
dst .ColumnName = msg .ColumnName
dst .DataTypeName = msg .DataTypeName
dst .ConstraintName = msg .ConstraintName
dst .File = msg .File
dst .Line = msg .Line
dst .Routine = msg .Routine
dst .UnknownFields = msg .UnknownFields
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 .