msg_net.go 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. // package msg_net -- сетевые сообщения
  2. package msg_net
  3. import (
  4. "encoding/json"
  5. "fmt"
  6. "git.p78su.freemyip.com/svi/gostore/pkg/types"
  7. )
  8. // Читает значение из анонимного хранилища
  9. type MsgFindRequest struct {
  10. Key_ string `json:"key" form:"key"` // Ключ для поиска в хранилище (запрос)
  11. Values_ []string `json:"values" form:"val"` // Ключи в хранилище по префиксу (ответ)
  12. }
  13. // NewFindRequest -- создание запроса на поиск
  14. func NewFindRequest(key string) (types.IFindRequest, error) {
  15. if key == "" {
  16. return nil, fmt.Errorf("NewFindRequest(): key is empty")
  17. }
  18. sf := &MsgFindRequest{
  19. Key_: key,
  20. Values_: []string{},
  21. }
  22. return sf, nil
  23. }
  24. // UnmarshalFindRequest -- десериализация
  25. func UnmarshalFindRequest(key string, binData []byte) (types.IFindRequest, error) {
  26. sf := &MsgFindRequest{}
  27. err := json.Unmarshal(binData, sf)
  28. if err != nil {
  29. return nil, fmt.Errorf("Unmarshal(): in JSON decode, err=\n\t%w", err)
  30. }
  31. if sf.Key_ != key {
  32. return nil, fmt.Errorf("Unmarshal(): key mismatch(%q, key=%q)", sf.Key_, key)
  33. }
  34. return sf, nil
  35. }
  36. // Marshal -- сериализация
  37. func (sf *MsgFindRequest) Marshal() []byte {
  38. binData, _ := json.MarshalIndent(sf, "", " ")
  39. return binData
  40. }
  41. // Values -- возвращает список ключей по префиксу
  42. func (sf *MsgFindRequest) Values() []string {
  43. return sf.Values_
  44. }
  45. // Key -- возвращает ключ запроса
  46. func (sf *MsgFindRequest) Key() string {
  47. return sf.Key_
  48. }