mirror of
https://github.com/logos-messaging/go-libp2p-pubsub.git
synced 2026-01-05 14:23:10 +00:00
33 lines
546 B
Go
33 lines
546 B
Go
package pubsub
|
|
|
|
import "sync"
|
|
|
|
type msgIDGenerator struct {
|
|
defGen MsgIdFunction
|
|
|
|
topicGens map[string]MsgIdFunction
|
|
topicGensLk sync.RWMutex
|
|
}
|
|
|
|
func (m *msgIDGenerator) Add(topic string, gen MsgIdFunction) {
|
|
m.topicGensLk.Lock()
|
|
m.topicGens[topic] = gen
|
|
m.topicGensLk.Unlock()
|
|
}
|
|
|
|
func (m *msgIDGenerator) GenID(msg *Message) string {
|
|
if msg.ID != "" {
|
|
return msg.ID
|
|
}
|
|
|
|
m.topicGensLk.RLock()
|
|
gen, ok := m.topicGens[msg.GetTopic()]
|
|
m.topicGensLk.RUnlock()
|
|
if !ok {
|
|
gen = m.defGen
|
|
}
|
|
|
|
msg.ID = gen(msg.Message)
|
|
return msg.ID
|
|
}
|