Giter Club home page Giter Club logo

Comments (10)

kisielk avatar kisielk commented on August 22, 2024

So basically you're proposing adding the Type field? The others are already there.

from schema.

ilgooz avatar ilgooz commented on August 22, 2024

Yep

from schema.

kisielk avatar kisielk commented on August 22, 2024

Would it really be that much more helpful? You already get the key name so can just look up the struct definition.

from schema.

ilgooz avatar ilgooz commented on August 22, 2024

I guess I can get the field type that way by using reflection but it's just extra work and I also need to manage some caching for those types to improve performance. But it's all OK. Feel free to close the issue.

from schema.

kisielk avatar kisielk commented on August 22, 2024

I guess my question is about the usefulness of having the type name in the error message. For the programmer it seems it would be enough to have the field name. Or do you have some other purpose in mind, where your program would inspect the type?

from schema.

ilgooz avatar ilgooz commented on August 22, 2024

Yes, I've a wrapper func that parses the form to given struct and does some validation afterwards. Finally it returns an err next to the list of invalid fields. Since I use a wrapper func to avoid extra work on each http handler, I wouldn't manually check the struct to see the type of invalid fields and therefore I can't produce specific error messages for that types.

e.g.:

type User struct {
  Age int `schema:"age" validate:"max:30"`
  Time time.Time `schema:"time"`
}

var user User

invalids, err := parseForm(r.Form, &user)
if err != nil {
  w.WriteHeader(http.IntervalServerError)
  return
}

// some possible values of `invalids` 

// if all valid
map[string]string{}
// if age field is not an int
map[string]string{
  "age": "must be a number", // parsing err
}
// if age over 30 and time is not valid
map[string]string{
  "age": "must be greater than 30", // validation error
  "time": "time must be UTC formatted", // parsing err
}

// then I can simply response a json error message to user:
errRes := struct {
  Message string
  Fields map[string]string
}{"Unvalid form data", invalids}
json(w, http.StatusBadRequest, errRes)

from schema.

kisielk avatar kisielk commented on August 22, 2024

right, but you wouldn't just return the type string to the user since it could be any arbitrary go type? It seems to me it wouldn't have much meaning to a client of a web service

from schema.

ilgooz avatar ilgooz commented on August 22, 2024

of course, I never return the go type as a json error response. I produce pretty error messages depending on those types in my API and send them as a response. For example if I expect a field as a UTC time and it can not being parsed to time.Time I simply say "this field is not a valid time" or a field's value expected as a bool but given value doesn't satisfy strconv.ParseBool() then I say "this field is not bool"

from schema.

ilgooz avatar ilgooz commented on August 22, 2024

by the way the Type that I talking about in ConversionError is the expected type of the field

from schema.

kisielk avatar kisielk commented on August 22, 2024

Right. I guess one complication is what to return in the cases of slice elements and how to differentiate between the error being a slice not passed as the value, or one of the elements being the wrong type..

from schema.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.