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  }