func nextParamState()

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