github.com/mavryk-network/mvgo@v1.19.9/internal/compose/alpha/task.go (about) 1 // Copyright (c) 2023 Blockwatch Data Inc. 2 // Author: alex@blockwatch.cc, abdul@blockwatch.cc 3 4 package alpha 5 6 import ( 7 "fmt" 8 9 "github.com/mavryk-network/mvgo/codec" 10 "github.com/mavryk-network/mvgo/internal/compose" 11 "github.com/mavryk-network/mvgo/rpc" 12 ) 13 14 type TaskBuilder interface { 15 Type() string 16 Validate(compose.Context, Task) error 17 Build(compose.Context, Task) (*codec.Op, *rpc.CallOptions, error) 18 } 19 20 type TaskFactory func() TaskBuilder 21 22 var ( 23 taskRegistry map[string]TaskFactory = make(map[string]TaskFactory) 24 ) 25 26 func RegisterTask(typ string, fn TaskFactory) { 27 taskRegistry[typ] = fn 28 } 29 30 func NewTask(typ string) (TaskBuilder, error) { 31 fn, ok := taskRegistry[typ] 32 if !ok { 33 return nil, fmt.Errorf("unsupported task type %s", typ) 34 } 35 return fn(), nil 36 }