log_topic.go 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. // package log_topic -- элемент лога шины топика
  2. package log_topic
  3. import (
  4. "fmt"
  5. . "gitp78su.ipnodns.ru/svi/kern/v4/lev0/kalias"
  6. . "gitp78su.ipnodns.ru/svi/kern/v4/lev0/ktypes"
  7. . "gitp78su.ipnodns.ru/svi/kern/v4/lev1/result"
  8. )
  9. // LogTopic -- элемент лога шины
  10. type LogTopic struct {
  11. topic ATopic // Топик, куда публиковать лог
  12. client IBusClient // С помощью чего публиковать лог
  13. }
  14. // NewLogTopic -- возвращает новый элемент лога
  15. func NewLogTopic(topic ATopic, client IBusClient) IResult[*LogTopic] {
  16. if topic == "" {
  17. err := fmt.Errorf("NewLogTopic(): topic is empty")
  18. return NewErr[*LogTopic](err)
  19. }
  20. if client == nil {
  21. err := fmt.Errorf("NewLogTopic(): IBusClient==nil")
  22. return NewErr[*LogTopic](err)
  23. }
  24. sf := &LogTopic{
  25. topic: topic,
  26. client: client,
  27. }
  28. return NewRes(sf)
  29. }
  30. // Pub -- публикует сообщение в топик
  31. func (sf *LogTopic) Pub(binMsg []byte) IResult[bool] {
  32. res := sf.client.Publish(sf.topic, binMsg)
  33. if res.IsErr() {
  34. err := fmt.Errorf("LogTopic.Pub(): in pub with client, err=\n\t%v", res.Err())
  35. return NewErr[bool](err)
  36. }
  37. return res
  38. }