func nextParamState()

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))
	}
}