github.com/alkemics/goflow@v0.2.1/checkers/previous/check.go (about) 1 package previous 2 3 import ( 4 "fmt" 5 6 "github.com/alkemics/goflow" 7 ) 8 9 type Error struct { 10 NID string 11 } 12 13 func (e Error) Error() string { 14 return fmt.Sprintf("node not found: %s (after)", e.NID) 15 } 16 17 // Check checks that all nodes in previous exist. 18 func Check(graph goflow.GraphRenderer) error { 19 nodes := graph.Nodes() 20 21 allNodeIDs := make(map[string]struct{}) 22 for _, n := range nodes { 23 allNodeIDs[n.ID()] = struct{}{} 24 } 25 26 errs := make([]error, 0) 27 for _, n := range nodes { 28 for _, p := range n.Previous() { 29 if _, ok := allNodeIDs[p]; !ok { 30 errs = append(errs, Error{p}) 31 } 32 } 33 } 34 35 if len(errs) > 0 { 36 return goflow.MultiError{Errs: errs} 37 } 38 39 return nil 40 }