Skip to content
 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

71 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

go-mediator

Simple mediator implementation in go, offering in-process messaging with behaviours.

Commands

type CreateOrderCommand struct {
    Id string `validate:"required,min=10"`
}

func (CreateOrderCommand) Key() string { reflect.TypeOf(CreateOrderCommand{}).Name() }

type CreateOrderCommandHandler struct {}

func NewCreateOrderCommandHandler() CreateOrderCommandHandler {
    return CreateOrderCommandHandler{}
}

func (CreateOrderCommandHandler) Handle(ctx context.Context, msg mediator.Message) (interface{}, error) {
    cmd := msg.(CreateOrderCommand)
    fmt.Println(cmd.Id) // Or something interesting instead...
    return nil, nil
}

Behaviours

PipelineBehaviour interface implementation usage

type Logger struct{}

func NewLogger() *Logger { return &Logger{} }

func (l *Logger) Process(ctx context.Context, msg mediator.Message, next mediator.Next) (interface{}, error) {
    log.Println("Pre Process!")
    result, err := next(ctx)
    log.Println("Post Process...")
    return result, err
}

m, err := mediator.New(mediator.WithBehaviour(behaviour.NewLogger()))

Func based usage

m, err := mediator.New(mediator.WithBehaviourFunc(func(ctx context.Context, msg mediator.Message, next mediator.Next) (interface{}, error) {
    log.Println("Pre Process!")
    next(ctx)
    log.Println("Post Process")
    
    return  nil, nil
}))

Usages

m, err := mediator.New(
    mediator.WithBehaviour(behaviour.NewLogger()),
    mediator.WithBehaviour(behaviour.NewValidator()),
    mediator.WithHandler(FakeCommand{}, NewFakeCommandCommandHandler(r)),
)

cmd := FakeCommand{   
    Name: "Amsterdam",  
}

ctx := context.Background()

result, err := m.Send(ctx, cmd)

Func based usage

m, err  := mediator.New(
    mediator.WithBehaviourFunc(func(ctx context.Context, cmd mediator.Message, next mediator.Next) (interface{}, error) {
        log.Println("Pre Process - 1!")
        
        next(ctx)
        
        log.Println("Post Process - 1")
        return  nil, nil
}))

Examples

Simple

TODO: Add Request/Response example

About

Simple mediator implementation in go

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages