in workflow.go [182:207]
func (w *Workflow) StateOf(step Steper) *State {
if w.Empty() || step == nil {
return nil
}
for root := range w.steps {
var find *State
Traverse(root, func(s Steper, walked []Steper) TraverseDecision {
if step == s {
find = w.steps[root]
return TraverseStop // found
}
if sub, ok := s.(interface{ StateOf(Steper) *State }); ok {
if state := sub.StateOf(step); state != nil {
find = state
return TraverseStop // found in sub-workflow
}
return TraverseEndBranch // not found in sub-workflow
}
return TraverseContinue
})
if find != nil {
return find
}
}
return nil
}