in sdks/go/pkg/beam/core/funcx/fn.go [424:503]
func nextParamState(cur paramState, transition FnParamKind) (paramState, error) {
switch cur {
case psStart:
switch transition {
case FnContext:
return psContext, nil
case FnWindow:
return psWindow, nil
case FnEventTime:
return psEventTime, nil
case FnType:
return psType, nil
case FnRTracker:
return psRTracker, nil
}
case psContext:
switch transition {
case FnWindow:
return psWindow, nil
case FnEventTime:
return psEventTime, nil
case FnType:
return psType, nil
case FnRTracker:
return psRTracker, nil
}
case psWindow:
switch transition {
case FnEventTime:
return psEventTime, nil
case FnType:
return psType, nil
case FnRTracker:
return psRTracker, nil
}
case psEventTime:
switch transition {
case FnType:
return psType, nil
case FnRTracker:
return psRTracker, nil
}
case psType:
switch transition {
case FnRTracker:
return psRTracker, nil
}
case psRTracker:
// Completely handled by the default clause
case psInput:
switch transition {
case FnIter, FnReIter:
return psInput, nil
}
case psOutput:
switch transition {
case FnValue, FnIter, FnReIter:
return -1, errInputPrecedence
}
}
// Default transition cases to reduce duplication above
switch transition {
case FnContext:
return -1, errContextParam
case FnWindow:
return -1, errWindowParamPrecedence
case FnEventTime:
return -1, errEventTimeParamPrecedence
case FnType:
return -1, errReflectTypePrecedence
case FnRTracker:
return -1, errRTrackerPrecedence
case FnIter, FnReIter, FnValue:
return psInput, nil
case FnEmit:
return psOutput, nil
default:
panic(fmt.Sprintf("library error, unknown ParamKind: %v", transition))
}
}