// package log_topic -- элемент лога шины топика
package log_topic

import (
	"fmt"

	. "gitp78su.ipnodns.ru/svi/kern/v2/kc/helpers"
	. "gitp78su.ipnodns.ru/svi/kern/v2/krn/kalias"
	. "gitp78su.ipnodns.ru/svi/kern/v2/krn/ktypes"
)

// LogTopic -- элемент лога шины
type LogTopic struct {
	topic  ATopic     // Топик, куда публиковать лог
	client IBusClient // С помощью чего публиковать лог
}

// NewLogTopic -- возвращает новый элемент лога
func NewLogTopic(topic ATopic, client IBusClient) *LogTopic {
	Hassert(topic != "", "NewLogTopic(): topic is empty")
	Hassert(client != nil, "NewLogTopic(): IBusClient==nil")
	sf := &LogTopic{
		topic:  topic,
		client: client,
	}
	return sf
}

// Pub -- публикует сообщение в топик
func (sf *LogTopic) Pub(binMsg []byte) Result[bool] {
	res := sf.client.Publish(sf.topic, binMsg)
	if res.IsErr() {
		err := fmt.Errorf("LogTopic.Pub(): in pub with client, err=\n\t%v", res.Err())
		return NewErr[bool](err)
	}
	return res
}
