request.go 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. package request
  2. import (
  3. "encoding/json"
  4. "git.sxidc.com/go-tools/api_binding/mqtt_binding/mqtt_client"
  5. "git.sxidc.com/go-tools/api_binding/mqtt_binding/mqtt_client/router"
  6. "git.sxidc.com/go-tools/api_binding/mqtt_binding/response"
  7. "github.com/go-playground/validator/v10"
  8. )
  9. type CallerIdentifierRequest struct {
  10. CallerIdentifier string `json:"callerIdentifier" validate:"required"`
  11. }
  12. func (req *CallerIdentifierRequest) Identifier() string {
  13. return req.CallerIdentifier
  14. }
  15. var validate = validator.New(validator.WithRequiredStructEnabled())
  16. func BindingJson[O any](c *mqtt_client.MqttClient, item *router.Item, request any,
  17. responseIdentifier response.Identifier, sendFunc response.SendFunc[O]) bool {
  18. data := item.GetData()
  19. if data != nil && len(data) != 0 {
  20. if responseIdentifier != nil {
  21. err := json.Unmarshal(data, responseIdentifier)
  22. if err != nil {
  23. panic(err)
  24. }
  25. err = validate.Struct(responseIdentifier)
  26. if err != nil {
  27. panic(err)
  28. }
  29. }
  30. if request != nil {
  31. err := json.Unmarshal(data, request)
  32. if err != nil {
  33. var zero O
  34. sendFunc(c, item, responseIdentifier, zero, err)
  35. return false
  36. }
  37. }
  38. }
  39. if request != nil {
  40. err := validate.Struct(request)
  41. if err != nil {
  42. var zero O
  43. sendFunc(c, item, responseIdentifier, zero, err)
  44. return false
  45. }
  46. }
  47. return true
  48. }