monoculum / formam

a package for decode form's values into struct in Go
Apache License 2.0
190 stars 19 forks source link

Allow map keys with brackets #45

Open darigaaz opened 3 years ago

darigaaz commented 3 years ago

fixed #44

darigaaz commented 3 years ago

yeah... it looks like complete rewrite of func (dec *Decoder) analyzePath(), that is bad for review,
but i guess i had no other option =\

now it looks more like parsing state machine except formam.go:265

            // found a field, we need to know if the field is next to a closing bracket,
            // if it is then no need to traverse again
            // for example: [0].Field
            if traversedByBracket {
                traversedByBracket = false
                lastPos = i + 1
                continue
            }

where we need to skip traversing if . is following ]
s[k]w == s[k].w (extra dot after closing bracket)

arp242 commented 3 years ago

I need to think about this one a bit to ensure there are no edge cases where Weird Stuff™ happens; I'm a bit nervous about that. I need to get back to this.

stufently commented 3 years ago

@arp242 please apply this pr , we want use this lib in our project and need this fix.

arp242 commented 3 years ago

I haven't had the time to look at it yet @stufently, but you can use replace github.com/monoculum/formam => [..] in your go.mod to use this branch (or any other version) if you want – you don't need to use the master branch.

darigaaz commented 3 years ago

updated to recent master resolving conflicts