Skip to content

Latest commit

 

History

History
43 lines (33 loc) · 1.15 KB

README.md

File metadata and controls

43 lines (33 loc) · 1.15 KB

go-eventdriver

Go package for handling local communication and logic responsibility segregation in an eventual way

Usage

import (
	"context"

	"github.com/op/go-logging"
	"github.com/spf13/viper"
	"github.com/timoth-y/go-eventdriver"
)

func main() {
	// First, let's initialize eventdriver package:
	eventdriver.Init(
		eventdriver.WithLogger(logging.MustGetLogger("eventdriver_test")),
		eventdriver.WithBufferSize(viper.GetInt("event_channel_buffer_size")),
	)

	// Put handler somewhere in the use cases layer:
	eventdriver.SubscribeHandler("example.event.occurred", func(ctx context.Context, v interface{}) error {
		if payload, ok := v.(ExampleEventPayload); ok {
			// Do some awesome handling of the event here
			handleEvent(payload)

			return nil
		}

		return eventdriver.ErrIncorrectPayload
	})
	
	// Emit event in any place where such event can occur:
	eventdriver.EmitEvent(context.Background(), "example.event.occurred", ExampleEventPayload{
		Nice: true,
	})

	// Shutdown event loop gracefully.
	eventdriver.Close()
}