in sdks/go/pkg/beam/core/funcx/fn.go [560:744]
func nextParamState(cur paramState, transition FnParamKind) (paramState, error) {
switch cur {
case psStart:
switch transition {
case FnContext:
return psContext, nil
case FnPane:
return psPane, nil
case FnWindow:
return psWindow, nil
case FnEventTime:
return psEventTime, nil
case FnWatermarkEstimator:
return psWatermarkEstimator, nil
case FnType:
return psType, nil
case FnBundleFinalization:
return psBundleFinalization, nil
case FnRTracker:
return psRTracker, nil
case FnStateProvider:
return psStateProvider, nil
case FnTimerProvider:
return psTimerProvider, nil
}
case psContext:
switch transition {
case FnPane:
return psPane, nil
case FnWindow:
return psWindow, nil
case FnEventTime:
return psEventTime, nil
case FnWatermarkEstimator:
return psWatermarkEstimator, nil
case FnType:
return psType, nil
case FnBundleFinalization:
return psBundleFinalization, nil
case FnRTracker:
return psRTracker, nil
case FnStateProvider:
return psStateProvider, nil
case FnTimerProvider:
return psTimerProvider, nil
}
case psPane:
switch transition {
case FnWindow:
return psWindow, nil
case FnEventTime:
return psEventTime, nil
case FnWatermarkEstimator:
return psWatermarkEstimator, nil
case FnType:
return psType, nil
case FnBundleFinalization:
return psBundleFinalization, nil
case FnRTracker:
return psRTracker, nil
case FnStateProvider:
return psStateProvider, nil
case FnTimerProvider:
return psTimerProvider, nil
}
case psWindow:
switch transition {
case FnEventTime:
return psEventTime, nil
case FnWatermarkEstimator:
return psWatermarkEstimator, nil
case FnType:
return psType, nil
case FnBundleFinalization:
return psBundleFinalization, nil
case FnRTracker:
return psRTracker, nil
case FnStateProvider:
return psStateProvider, nil
case FnTimerProvider:
return psTimerProvider, nil
}
case psEventTime:
switch transition {
case FnWatermarkEstimator:
return psWatermarkEstimator, nil
case FnType:
return psType, nil
case FnBundleFinalization:
return psBundleFinalization, nil
case FnRTracker:
return psRTracker, nil
case FnStateProvider:
return psStateProvider, nil
case FnTimerProvider:
return psTimerProvider, nil
}
case psWatermarkEstimator:
switch transition {
case FnType:
return psType, nil
case FnBundleFinalization:
return psBundleFinalization, nil
case FnRTracker:
return psRTracker, nil
case FnStateProvider:
return psStateProvider, nil
case FnTimerProvider:
return psTimerProvider, nil
}
case psType:
switch transition {
case FnBundleFinalization:
return psBundleFinalization, nil
case FnRTracker:
return psRTracker, nil
case FnStateProvider:
return psStateProvider, nil
case FnTimerProvider:
return psTimerProvider, nil
}
case psBundleFinalization:
switch transition {
case FnRTracker:
return psRTracker, nil
case FnStateProvider:
return psStateProvider, nil
case FnTimerProvider:
return psTimerProvider, nil
}
case psRTracker:
switch transition {
case FnStateProvider:
return psStateProvider, nil
case FnTimerProvider:
return psTimerProvider, nil
}
case psStateProvider:
switch transition {
case FnTimerProvider:
return psTimerProvider, nil
}
case psTimerProvider:
// 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 FnPane:
return -1, errPaneParamPrecedence
case FnWindow:
return -1, errWindowParamPrecedence
case FnEventTime:
return -1, errEventTimeParamPrecedence
case FnWatermarkEstimator:
return -1, errWatermarkEstimatorParamPrecedence
case FnType:
return -1, errReflectTypePrecedence
case FnBundleFinalization:
return -1, errBundleFinalizationPrecedence
case FnRTracker:
return -1, errRTrackerPrecedence
case FnStateProvider:
return -1, errStateProviderPrecedence
case FnTimerProvider:
return -1, errTimerProviderPrecedence
case FnIter, FnReIter, FnValue, FnMultiMap:
return psInput, nil
case FnEmit:
return psOutput, nil
default:
panic(fmt.Sprintf("library error, unknown ParamKind: %v", transition))
}
}