diff --git a/README.md b/README.md index 62ef36c..c1c5bf9 100644 --- a/README.md +++ b/README.md @@ -4,10 +4,75 @@

- [WIP] Go package for object validation with a goal of simple and flexible. + Yet another Go struct/object validation package, with a focus on simplicity, + flexibility, and full control over validation logic.

-## License +--- + +Add validation to any type, by simply implementing the `Validatable` interface: + +```go +type Validatable interface { + Validate() error +} +``` + +## Import + +```go +import "github.com/romdo/go-validate" +``` + +## Example + +```go +type Order struct { + Books []*Book `json:"books"` +} + +type Book struct { + Title string `json:"title"` + Author string `json:"author"` +} + +func (s *Book) Validate() error { + var errs error + if s.Title == "" { + errs = validate.Append(errs, &validate.Error{ + Field: "Title", Msg: "is required", + }) + } + + // Helper to perform the same kind of check as above for Title. + errs = validate.Append(errs, validate.RequireField("Author", s.Author)) + + return errs +} + +func main() { + errs := validate.Validate(&Order{Books: []*Book{{Title: ""}}}) + + for _, err := range validate.Errors(errs) { + fmt.Println(err.Error()) + } +} +``` + +Above example produces the following output: + +``` +books.0.title: is required +books.0.author: is required +``` + +## Documentation + +Please see the +[Go Reference](https://pkg.go.dev/github.com/romdo/go-validate#section-documentation) +for documentation and examples. + +## LICENSE [MIT](https://github.com/romdo/go-conventionalcommit/blob/main/LICENSE)