mirror of https://github.com/knative/func.git
72 lines
1.4 KiB
Go
72 lines
1.4 KiB
Go
package cloudevents
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
nethttp "net/http"
|
|
|
|
cloudevents "github.com/cloudevents/sdk-go/v2"
|
|
"github.com/cloudevents/sdk-go/v2/client"
|
|
"github.com/cloudevents/sdk-go/v2/event"
|
|
"github.com/cloudevents/sdk-go/v2/protocol/http"
|
|
"github.com/cloudevents/sdk-go/v2/types"
|
|
"github.com/google/uuid"
|
|
)
|
|
|
|
const (
|
|
DefaultSource = "/boson/fn"
|
|
DefaultType = "boson.fn"
|
|
)
|
|
|
|
type Emitter struct {
|
|
Endpoint string
|
|
Source string
|
|
Type string
|
|
Id string
|
|
Data string
|
|
ContentType string
|
|
Transport nethttp.RoundTripper
|
|
}
|
|
|
|
func NewEmitter() *Emitter {
|
|
return &Emitter{
|
|
Source: DefaultSource,
|
|
Type: DefaultType,
|
|
Id: uuid.NewString(),
|
|
Data: "",
|
|
ContentType: event.TextPlain,
|
|
Transport: nethttp.DefaultTransport,
|
|
}
|
|
}
|
|
|
|
func (e *Emitter) Emit(ctx context.Context, endpoint string) (err error) {
|
|
p, err := http.New(http.WithTarget(endpoint), http.WithRoundTripper(e.Transport))
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
c, err := client.New(p)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
evt := event.Event{
|
|
Context: event.EventContextV1{
|
|
Type: e.Type,
|
|
Source: *types.ParseURIRef(e.Source),
|
|
ID: e.Id,
|
|
}.AsV1(),
|
|
}
|
|
if err = evt.SetData(e.ContentType, e.Data); err != nil {
|
|
return
|
|
}
|
|
event, result := c.Request(ctx, evt)
|
|
if !cloudevents.IsACK(result) {
|
|
return fmt.Errorf(result.Error())
|
|
}
|
|
if event != nil {
|
|
fmt.Printf("%v", event)
|
|
}
|
|
return nil
|
|
}
|