* Add `AtIndex` method to deal to attach index at the current error.
This is useful when we are dealing with primite leaf list (e.g.
a list of strings).
The alternative are
a) creating dummy error and then executing ViaFieldIndex(), which is
plain ugly
b) implementing Validate() on the primitive type via type aliasing and
then collecting errors, which seems an overkill.
In addition it seems ViaFieldIndex was not covered by unit tests,
so I've added one to take care of that.
* implement suggestions from the review
* cleanup
* cosmetic
* cosmetic
* Some clean ups in the FieldError code and its tests.
- rename FieldError.getNormalizedError to be normalized:
- Go kind of discourages GetA() vs A()
- it's an error, so normalizing itself is also an error, so
normalizedError() is a tautology at this point
- flatten was doing a[x]=fmt.Sprintf("%s%s", a[x],y), which is a very
expensive substitution for a[x]+=y
- some minor test cleanups (fix strings, streamline `got, want:=`
pattern, etc.
* Also make normalize() and merge() operate on pointers.
As the code currently is structured we are doing lots of duplication
and copies of the objects, since we're doing []FieldError throughout
normalize() and merge() even though normalize already returns a copy of
the initial error tree, rather than a list of pointers to existing
errors.
Hence list returned by normalize() and hence merge() can actually be pointer
lists which would save us some CPU and memory.
* checkpoint.
* Tried a new way.
* Some more slimplifying based on feedback.
* use bang vs == false.
* not sure why I did not use go style on this forloop, fixed.
* Testing an idea for field errors.
* wrap other tests for webhook.
* move FieldError to Error, FieldErrors to FieldError
* Rename files to reflect their type.
* Reworked this to require no changes externally.
* test also.
* gotta cover those tests.
* nil check
* Adding Also.
* Clean up comments.
* Don't delete the tests.
* Null check test the clear.
* Fix nits.
* FieldError is now non-mutating.
* More errorf formatting fixes.
* I can make this even simpiler
* I can make this even MORE simpiler
* Add comment to make flow of also clear.
* fix comment, optimize make errors
* Adding .ViaIndex(1). to make spec.param[1] easier to do.
* Adding ViaKey
* fix order of bag example.
* Add code coverage to missed line.
* Adding ViaFieldIndex helper
* cleaning up.
* compress more.
* more cleanup
* test name