package main import ( "errors" "fmt" "log" "dev.hexasoftware.com/x/seq" "dev.hexasoftware.com/hxs/prettylog" ) type Xpto struct { ID string } func GenXpto(i int) (*Xpto, error) { log.Println("Generating xpto") return &Xpto{fmt.Sprintf("ID:%d", i)}, nil } func AnotherRandomFunc() error { return errors.New("I have a error") } func NextXpto(id string) error { log.Println("The id was:", id) return nil } func main() { prettylog.Global() s := seq.New() log.Println("Adding GenXPto") val := &Xpto{} s.Add(GenXpto, 10).Grab(&val) s.Add(func() error { return NextXpto(val.ID) }) s.Add(func(p *Xpto) error { return NextXpto(p.ID) }, seq.SeqReturn(0, 0)) s.Add(NextXpto, seq.ExecParam(0)) s.Exec("abc") s2 := seq.New() s2.Add("Generate Xpto", func(s *seq.Context) error { xpto, err := GenXpto(10) s.Set("xpto", xpto) return err }) s2.Add("Consume xpto", func(s *seq.Context) error { var v *Xpto = s.Get("xpto").(*Xpto) return NextXpto(v.ID) }) s2.Exec() }