63 lines
1.1 KiB
Go
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 ""
|
||
|
}
|