oc-lib/tools/nats_caller.go
2024-08-21 10:04:09 +02:00

63 lines
1.1 KiB
Go

package tools
import (
"encoding/json"
"strings"
"github.com/nats-io/nats.go"
)
type NATSMethod int
const (
REMOVE NATSMethod = iota
CREATE
)
func NameToMethod(name string) NATSMethod {
for _, v := range [...]NATSMethod{REMOVE, CREATE} {
if strings.Contains(strings.ToLower(v.String()), strings.ToLower(name)) {
return v
}
}
return -1
}
func (d NATSMethod) GenerateKey(name string) string {
return name + "_" + d.String()
}
func (d NATSMethod) String() string {
return [...]string{"remove", "create"}[d]
}
type NATSCaller struct {
natsUrl string
}
func NewNATSCaller(url string) *NATSCaller {
return &NATSCaller{
natsUrl: url,
}
}
func (o *NATSCaller) SetNATSPub(dataName string, method NATSMethod, data interface{}) string {
if o.natsUrl == "" {
return " -> NATS_SERVER is not set"
}
nc, err := nats.Connect(o.natsUrl)
if err != nil {
return " -> Could not reach NATS server : " + err.Error()
}
defer nc.Close()
js, err := json.Marshal(data)
if err != nil {
return " -> " + err.Error()
}
err = nc.Publish(method.GenerateKey(dataName), js)
if err != nil {
return " -> " + err.Error()
}
return ""
}