Files
showbridge-go/internal/processor/nats-message-create.go

87 lines
1.8 KiB
Go

package processor
import (
"bytes"
"context"
"fmt"
"text/template"
"github.com/jwetzell/showbridge-go/internal/config"
)
type NATSMessage struct {
Subject string
Payload []byte
}
type NATSMessageCreate struct {
config config.ProcessorConfig
Subject *template.Template
Payload *template.Template
}
func (nmc *NATSMessageCreate) Process(ctx context.Context, payload any) (any, error) {
templateData := GetTemplateData(ctx, payload)
var payloadBuffer bytes.Buffer
err := nmc.Payload.Execute(&payloadBuffer, templateData)
if err != nil {
return nil, err
}
payloadString := payloadBuffer.String()
var subjectBuffer bytes.Buffer
err = nmc.Subject.Execute(&subjectBuffer, templateData)
if err != nil {
return nil, err
}
subjectString := subjectBuffer.String()
message := NATSMessage{
Subject: subjectString,
Payload: []byte(payloadString),
}
return message, nil
}
func (nmc *NATSMessageCreate) Type() string {
return nmc.config.Type
}
func init() {
RegisterProcessor(ProcessorRegistration{
Type: "nats.message.create",
New: func(config config.ProcessorConfig) (Processor, error) {
params := config.Params
subjectString, err := params.GetString("subject")
if err != nil {
return nil, fmt.Errorf("nats.message.create subject error: %w", err)
}
subjectTemplate, err := template.New("subject").Parse(subjectString)
if err != nil {
return nil, err
}
payloadString, err := params.GetString("payload")
if err != nil {
return nil, fmt.Errorf("nats.message.create payload error: %w", err)
}
payloadTemplate, err := template.New("payload").Parse(payloadString)
if err != nil {
return nil, err
}
return &NATSMessageCreate{config: config, Subject: subjectTemplate, Payload: payloadTemplate}, nil
},
})
}