package server import ( "encoding/json" "fmt" "io" ) func handleEvent(rc io.ReadCloser) error { decoder := json.NewDecoder(rc) for decoder.More() { var event event if err := decoder.Decode(&event); err != nil { return fmt.Errorf("failed to parse history body data %s", err.Error()) } errors := event.validate() if len(errors) != 0 { return fmt.Errorf("failed to validate data errors: %v", errors) } } return nil } func (e event) validate() map[string]string { errors := e.generic.validate() err := e.EventId.validate() if err != nil { errors["eventId"] = err.Error() } err = e.Severity.validate() if err != nil { errors["severity"] = err.Error() } err = e.Hosts.validate() if err != nil { errors["hosts"] = err.Error() } for i, h := range e.Hosts.Value { err = h.Host.validate() if err != nil { errors[fmt.Sprintf("hosts[%d].host", i)] = err.Error() } err = h.Name.validate() if err != nil { errors[fmt.Sprintf("hosts[%d].name", i)] = err.Error() } } err = e.Tags.validate() if err != nil { errors["tags"] = err.Error() } for i, t := range e.Tags.Value { err = t.Tag.validate() if err != nil { errors[fmt.Sprintf("tags[%d].host", i)] = err.Error() } err = t.Value.validate() if err != nil { errors[fmt.Sprintf("tags[%d].name", i)] = err.Error() } } return errors }