// +build !online package services import ( "fmt" "context" "git.grassecon.net/grassrootseconomics/visedriver/storage" devremote "git.grassecon.net/grassrootseconomics/sarafu-api/dev" "git.grassecon.net/grassrootseconomics/sarafu-api/remote" apievent "git.grassecon.net/grassrootseconomics/sarafu-api/event" "git.grassecon.net/grassrootseconomics/sarafu-vise/handlers/event" ) type localEmitter struct { h *apievent.EventsHandler } func (d *localEmitter) emit(ctx context.Context, msg apievent.Msg) error { var err error if msg.Typ == apievent.EventTokenTransferTag { tx, ok := msg.Item.(devremote.Tx) if !ok { return fmt.Errorf("not a valid tx") } ev := tx.ToTransferEvent() err = d.h.Handle(ctx, apievent.EventTokenTransferTag, &ev) } else if msg.Typ == apievent.EventRegistrationTag { acc, ok := msg.Item.(devremote.Account) if !ok { return fmt.Errorf("not a valid tx") } ev := acc.ToRegistrationEvent() err = d.h.Handle(ctx, apievent.EventRegistrationTag, &ev) } return err } func New(ctx context.Context, storageService storage.StorageService, conn storage.ConnData) remote.AccountService { svc := devremote.NewDevAccountService(ctx, storageService) svc = svc.WithAutoVoucher(ctx, "FOO", 42) eu := event.NewEventsUpdater(svc, storageService) emitter := &localEmitter{ h: eu.ToEventsHandler(), } svc = svc.WithEmitter(emitter.emit) svc.AddVoucher(ctx, "BAR") return svc }