@@ -103,16 +103,7 @@ func toIdlDecision(from *StateDecision, wfType string, registry Registry, encode
103103		var  options  * iwfidl.WorkflowStateOptions 
104104		if  ! strings .HasPrefix (fromMv .NextStateId , ReservedStateIdPrefix ) {
105105			stateDef  :=  registry .getWorkflowStateDef (wfType , fromMv .NextStateId )
106- 			options  =  stateDef .State .GetStateOptions ()
107- 			if  ShouldSkipWaitUntilAPI (stateDef .State ) {
108- 				if  options  ==  nil  {
109- 					options  =  & iwfidl.WorkflowStateOptions {
110- 						SkipWaitUntil : ptr .Any (true ),
111- 					}
112- 				} else  {
113- 					options .SkipWaitUntil  =  ptr .Any (true )
114- 				}
115- 			}
106+ 			options  =  toIdlStateOptions (ShouldSkipWaitUntilAPI (stateDef .State ), stateDef .State .GetStateOptions ())
116107		}
117108		mv  :=  iwfidl.StateMovement {
118109			StateId :      fromMv .NextStateId ,
@@ -125,3 +116,37 @@ func toIdlDecision(from *StateDecision, wfType string, registry Registry, encode
125116		NextStates : mvs ,
126117	}, nil 
127118}
119+ 
120+ func  toIdlStateOptions (skipWaitUntil  bool , stateOptions  * StateOptions ) * iwfidl.WorkflowStateOptions  {
121+ 	if  stateOptions  ==  nil  {
122+ 		stateOptions  =  & StateOptions {}
123+ 	}
124+ 
125+ 	idlStOptions  :=  & iwfidl.WorkflowStateOptions {
126+ 		SearchAttributesLoadingPolicy : stateOptions .SearchAttributesLoadingPolicy ,
127+ 		DataAttributesLoadingPolicy :   stateOptions .DataAttributesLoadingPolicy ,
128+ 		WaitUntilApiTimeoutSeconds :    stateOptions .WaitUntilApiTimeoutSeconds ,
129+ 		ExecuteApiTimeoutSeconds :      stateOptions .ExecuteApiTimeoutSeconds ,
130+ 		WaitUntilApiRetryPolicy :       stateOptions .WaitUntilApiRetryPolicy ,
131+ 		ExecuteApiRetryPolicy :         stateOptions .ExecuteApiRetryPolicy ,
132+ 		WaitUntilApiFailurePolicy :     stateOptions .WaitUntilApiFailurePolicy ,
133+ 	}
134+ 
135+ 	if  skipWaitUntil  {
136+ 		idlStOptions .SkipWaitUntil  =  ptr .Any (true )
137+ 	}
138+ 
139+ 	if  stateOptions .ExecuteApiFailureProceedState  !=  nil  {
140+ 		idlStOptions .ExecuteApiFailurePolicy  =  iwfidl .PROCEED_TO_CONFIGURED_STATE .Ptr ()
141+ 		idlStOptions .ExecuteApiFailureProceedStateId  =  ptr .Any (GetFinalWorkflowStateId (stateOptions .ExecuteApiFailureProceedState ))
142+ 
143+ 		proceedStateOptions  :=  stateOptions .ExecuteApiFailureProceedState .GetStateOptions ()
144+ 		if  proceedStateOptions  !=  nil  &&  proceedStateOptions .ExecuteApiFailureProceedState  !=  nil  {
145+ 			panic ("nested failure handling/recovery is not supported: ExecuteApiFailureProceedState cannot have ExecuteApiFailureProceedState" )
146+ 		}
147+ 		idlStOptions .ExecuteApiFailureProceedStateOptions  = 
148+ 			toIdlStateOptions (ShouldSkipWaitUntilAPI (stateOptions .ExecuteApiFailureProceedState ), proceedStateOptions )
149+ 	}
150+ 
151+ 	return  idlStOptions 
152+ }
0 commit comments