URI: 
       tpl: Provide more detailed errors in Where - hugo - [fork] hugo port for 9front
  HTML git clone git@git.drkhsh.at/hugo.git
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
   DIR README
   DIR LICENSE
       ---
   DIR commit f76e50118b8b5dd8989d068db35222bfa0a242d8
   DIR parent f84df16fea68955af265dad7057eae44c0da8639
  HTML Author: Cameron Moore <moorereason@gmail.com>
       Date:   Thu, 27 Dec 2018 22:28:54 -0600
       
       tpl: Provide more detailed errors in Where
       
       Diffstat:
         M tpl/collections/where.go            |      23 ++++++++++++-----------
       
       1 file changed, 12 insertions(+), 11 deletions(-)
       ---
   DIR diff --git a/tpl/collections/where.go b/tpl/collections/where.go
       @@ -278,18 +278,19 @@ func evaluateSubElem(obj reflect.Value, elemName string) (reflect.Value, error) 
                }
                mt, ok := objPtr.Type().MethodByName(elemName)
                if ok {
       -                if mt.PkgPath != "" {
       +                switch {
       +                case mt.PkgPath != "":
                                return zero, fmt.Errorf("%s is an unexported method of type %s", elemName, typ)
       -                }
       -                // struct pointer has one receiver argument and interface doesn't have an argument
       -                if mt.Type.NumIn() > 1 || mt.Type.NumOut() == 0 || mt.Type.NumOut() > 2 {
       -                        return zero, fmt.Errorf("%s is a method of type %s but doesn't satisfy requirements", elemName, typ)
       -                }
       -                if mt.Type.NumOut() == 1 && mt.Type.Out(0).Implements(errorType) {
       -                        return zero, fmt.Errorf("%s is a method of type %s but doesn't satisfy requirements", elemName, typ)
       -                }
       -                if mt.Type.NumOut() == 2 && !mt.Type.Out(1).Implements(errorType) {
       -                        return zero, fmt.Errorf("%s is a method of type %s but doesn't satisfy requirements", elemName, typ)
       +                case mt.Type.NumIn() > 1:
       +                        return zero, fmt.Errorf("%s is a method of type %s but requires more than 1 parameter", elemName, typ)
       +                case mt.Type.NumOut() == 0:
       +                        return zero, fmt.Errorf("%s is a method of type %s but returns no output", elemName, typ)
       +                case mt.Type.NumOut() > 2:
       +                        return zero, fmt.Errorf("%s is a method of type %s but returns more than 2 outputs", elemName, typ)
       +                case mt.Type.NumOut() == 1 && mt.Type.Out(0).Implements(errorType):
       +                        return zero, fmt.Errorf("%s is a method of type %s but only returns an error type", elemName, typ)
       +                case mt.Type.NumOut() == 2 && !mt.Type.Out(1).Implements(errorType):
       +                        return zero, fmt.Errorf("%s is a method of type %s returning two values but the second value is not an error type", elemName, typ)
                        }
                        res := objPtr.Method(mt.Index).Call([]reflect.Value{})
                        if len(res) == 2 && !res[1].IsNil() {