gopkg.in/rethinkdb/rethinkdb-go.v6@v6.2.2/encoding/errors.go (about)

     1  package encoding
     2  
     3  import (
     4  	"fmt"
     5  	"reflect"
     6  	"strings"
     7  )
     8  
     9  type MarshalerError struct {
    10  	Type reflect.Type
    11  	Err  error
    12  }
    13  
    14  func (e *MarshalerError) Error() string {
    15  	return "rethinkdb: error calling MarshalRQL for type " + e.Type.String() + ": " + e.Err.Error()
    16  }
    17  
    18  type InvalidUnmarshalError struct {
    19  	Type reflect.Type
    20  }
    21  
    22  func (e *InvalidUnmarshalError) Error() string {
    23  	if e.Type == nil {
    24  		return "rethinkdb: UnmarshalRQL(nil)"
    25  	}
    26  
    27  	if e.Type.Kind() != reflect.Ptr {
    28  		return "rethinkdb: UnmarshalRQL(non-pointer " + e.Type.String() + ")"
    29  	}
    30  	return "rethinkdb: UnmarshalRQL(nil " + e.Type.String() + ")"
    31  }
    32  
    33  // An InvalidTypeError describes a value that was
    34  // not appropriate for a value of a specific Go type.
    35  type DecodeTypeError struct {
    36  	DestType, SrcType reflect.Type
    37  	Reason            string
    38  }
    39  
    40  func (e *DecodeTypeError) Error() string {
    41  	if e.Reason != "" {
    42  		return "rethinkdb: could not decode type " + e.SrcType.String() + " into Go value of type " + e.DestType.String() + ": " + e.Reason
    43  	} else {
    44  		return "rethinkdb: could not decode type " + e.SrcType.String() + " into Go value of type " + e.DestType.String()
    45  	}
    46  }
    47  
    48  // An UnsupportedTypeError is returned by Marshal when attempting
    49  // to encode an unsupported value type.
    50  type UnsupportedTypeError struct {
    51  	Type reflect.Type
    52  }
    53  
    54  func (e *UnsupportedTypeError) Error() string {
    55  	return "rethinkdb: unsupported type: " + e.Type.String()
    56  }
    57  
    58  // An UnsupportedTypeError is returned by Marshal when attempting
    59  // to encode an unexpected value type.
    60  type UnexpectedTypeError struct {
    61  	DestType, SrcType reflect.Type
    62  }
    63  
    64  func (e *UnexpectedTypeError) Error() string {
    65  	return "rethinkdb: expected type: " + e.DestType.String() + ", got " + e.SrcType.String()
    66  }
    67  
    68  type UnsupportedValueError struct {
    69  	Value reflect.Value
    70  	Str   string
    71  }
    72  
    73  func (e *UnsupportedValueError) Error() string {
    74  	return "rethinkdb: unsupported value: " + e.Str
    75  }
    76  
    77  // Error implements the error interface and can represents multiple
    78  // errors that occur in the course of a single decode.
    79  type Error struct {
    80  	Errors []string
    81  }
    82  
    83  func (e *Error) Error() string {
    84  	points := make([]string, len(e.Errors))
    85  	for i, err := range e.Errors {
    86  		points[i] = fmt.Sprintf("* %s", err)
    87  	}
    88  
    89  	return fmt.Sprintf(
    90  		"%d error(s) decoding:\n\n%s",
    91  		len(e.Errors), strings.Join(points, "\n"))
    92  }
    93  
    94  func appendErrors(errors []string, err error) []string {
    95  	switch e := err.(type) {
    96  	case *Error:
    97  		return append(errors, e.Errors...)
    98  	default:
    99  		return append(errors, e.Error())
   100  	}
   101  }