Skip to content

Support alternative struct tags (instead of url) #29

Description

@emmanuel

We use Gin, and we're looking at using this library. Gin provides a BindQuery method, which decodes query params from a request into a struct, so long as the incoming request matches the expected names, expressed via the struct tag form.

We'd like to be able to use the same struct tags for encoding and decoding. In order to do so, we'd like to be able to configure this library to reflect on a different struct tag during encoding. In our case, we'd like to be able to configure this library to use the same struct tag as Gin, i.e., the form tag.

Would you be open to a PR that implements configurable struct tags?

I'm not sure what the best mechanism would be, perhaps a build flag or ENV_VAR. Any suggestions here would be most welcome.

Activity

  1. willnorris commented on Feb 24, 2021

    @willnorris
    Collaborator

    Is this still a problem for you, or did you end up working around it?

    If it's still a desirable feature, does anyone have pointers to examples of other libraries that do this? #15 does provide an implementation, but I just don't think I've ever seen a library that allows customizing struct tags like this, so would love to see any prior art before making any decisions.

  2. Andrew-M-C commented on Jun 15, 2021

    @Andrew-M-C

    There IS such kind of scenarios. We now have two:

    • Migrate some struct definitions from older ones, such as some struct defined by json tags
    • Generate some customized tags different from url query for different internal systems. For example, In system A, we use camel style, but some snake style.
    type config struct {
        Username string `sys1:"username"  sys2:"loginname"`
    }

    However, I prefer passing tag as a runtime parameter instead of pre-binding. Such as:

    v, _ := query.ValuesByTag(&conf, "sys1")
  3. maxlevin-gc commented on Feb 6, 2022

    @maxlevin-gc

    Hey @willnorris , we need this feature too, we are are working with gin +go-querystring and we have to tag both form and url in all of our params structs. Specifying custom tag for encoding will reduce chances of bugs when not setting both tags, and improve readability to our code. I hope you can reconsider merging #15 .

  4. NilsJPWerner commented on Mar 1, 2022

    @NilsJPWerner

    We have the same use case that would be great to solve using this library.

  5. svvitale commented on Feb 14, 2023

    @svvitale

    We also have a similar use case where we need to form encode a struct that only contains json tags. Unfortunately we do not own the struct definition, and cannot add url tags.

  6. gudvinr commented on Aug 28, 2023

    @gudvinr

    If it's still a desirable feature, does anyone have pointers to examples of other libraries that do this? #15 does provide an implementation, but I just don't think I've ever seen a library that allows customizing struct tags like this, so would love to see any prior art before making any decisions.

    gorilla/schema implements this in exactly the same way using SetAliasTag both in encoder and decoder.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions