Skip to content

Commit 9887b7b

Browse files
committed

File tree

4 files changed

+63
-39
lines changed

4 files changed

+63
-39
lines changed

polycode/apiserver.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ func invokeApiHandler(c *gin.Context) {
3333
return
3434
}
3535

36-
output := runTask(c, &input)
36+
output := runTask(c, input)
3737
println("client: api request completed")
3838
c.JSON(http.StatusOK, output)
3939
}
@@ -46,7 +46,7 @@ func invokeServiceHandler(c *gin.Context) {
4646
return
4747
}
4848

49-
output := runTask(c, &input)
49+
output := runTask(c, input)
5050
println("client: service request completed")
5151
c.JSON(http.StatusOK, output)
5252
}

polycode/model.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -61,10 +61,11 @@ type ApiStartEvent struct {
6161
}
6262

6363
type TaskOutput struct {
64-
IsAsync bool `json:"isAsync"`
65-
IsNull bool `json:"isNull"`
66-
Output any `json:"output"`
67-
Error *Error `json:"error"`
64+
IsAsync bool `json:"isAsync"`
65+
IsNull bool `json:"isNull"`
66+
IsError bool `json:"isError"`
67+
Output any `json:"output"`
68+
Error Error `json:"error"`
6869
}
6970

7071
type TaskCompleteEvent struct {

polycode/runtime.go

Lines changed: 55 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ func loadRoutes() []RouteData {
127127
return routes
128128
}
129129

130-
func runTask(ctx context.Context, event any) (evt *TaskCompleteEvent) {
130+
func runTask(ctx context.Context, event any) (evt TaskCompleteEvent) {
131131
println(fmt.Sprintf("client: run task with event %v", reflect.TypeOf(event)))
132132

133133
defer func() {
@@ -136,40 +136,43 @@ func runTask(ctx context.Context, event any) (evt *TaskCompleteEvent) {
136136
// Check if it's the specific error
137137
if err, ok := r.(error); ok {
138138
if errors.Is(err, ErrTaskInProgress) {
139-
fmt.Printf("task in progress\n")
140-
evt = &TaskCompleteEvent{}
139+
println("client: task in progress")
140+
evt = TaskCompleteEvent{}
141141
} else {
142-
fmt.Printf("error %s\n", err.Error())
142+
fmt.Printf("client: task completed with error %s\n", err.Error())
143143
stackTrace := string(debug.Stack())
144144
println(stackTrace)
145-
evt = errorToTaskComplete(err)
145+
evt = ErrorToTaskComplete(err)
146146
}
147147
} else {
148-
fmt.Printf("error %s\n", err.Error())
148+
fmt.Printf("client: task completed with error %s\n", err.Error())
149149
stackTrace := string(debug.Stack())
150150
println(stackTrace)
151-
evt = errorToTaskComplete(ErrUnknownError)
151+
evt = ErrorToTaskComplete(err)
152152
}
153153
}
154154
}()
155155

156156
switch it := event.(type) {
157-
case *TaskStartEvent:
157+
case TaskStartEvent:
158158
{
159159
println("client: handle task start event")
160160

161161
service, err := getService(it.ServiceName)
162162
if err != nil {
163-
return errorToTaskComplete(err)
163+
fmt.Printf("client: task completed with error %s\n", err.Error())
164+
return ErrorToTaskComplete(err)
164165
}
165166

166167
inputObj, err := service.GetInputType(it.EntryPoint)
167168
if err != nil {
168-
return errorToTaskComplete(err)
169+
fmt.Printf("client: task completed with error %s\n", err.Error())
170+
return ErrorToTaskComplete(err)
169171
}
170172
err = json.Unmarshal([]byte(it.Input.TargetReq), inputObj)
171173
if err != nil {
172-
return errorToTaskComplete(err)
174+
fmt.Printf("client: task completed with error %s\n", err.Error())
175+
return ErrorToTaskComplete(err)
173176
}
174177

175178
isWorkflow := service.IsWorkflow(it.EntryPoint)
@@ -200,24 +203,24 @@ func runTask(ctx context.Context, event any) (evt *TaskCompleteEvent) {
200203
}
201204

202205
if err != nil {
203-
return errorToTaskComplete(err)
206+
fmt.Printf("client: task completed with error %s\n", err.Error())
207+
return ErrorToTaskComplete(err)
204208
}
205209

206-
output := TaskOutput{}
207210
if ret == nil {
208-
output.IsNull = true
211+
println("client: task completed")
212+
return NilValueToTaskComplete()
209213
} else {
210-
output.Output = ret
214+
println("client: task completed")
215+
return ValueToTaskComplete(ret)
211216
}
212-
213-
println("client: task completed")
214-
return outputToTaskComplete(output)
215217
}
216-
case *ApiStartEvent:
218+
case ApiStartEvent:
217219
{
218220
println("client: handle http request")
219221
if httpHandler == nil {
220-
return errorToTaskComplete(ErrBadRequest)
222+
fmt.Printf("client: task completed with error %s\n", ErrBadRequest.Error())
223+
return ErrorToTaskComplete(ErrBadRequest)
221224
}
222225

223226
apiCtx := ApiContext{
@@ -230,17 +233,21 @@ func runTask(ctx context.Context, event any) (evt *TaskCompleteEvent) {
230233

231234
req, err := ConvertToHttpRequest(newCtx, it.Request)
232235
if err != nil {
233-
println("client: failed to convert api request")
234-
return errorToTaskComplete(err)
236+
fmt.Printf("client: task completed with error %s\n", err.Error())
237+
return ErrorToTaskComplete(err)
235238
}
236239

237240
resp := invokeHandler(httpHandler, req)
238241
println("client: task completed")
239-
return &TaskCompleteEvent{Output: TaskOutput{IsAsync: false, IsNull: false, Output: resp, Error: nil}}
242+
return ValueToTaskComplete(resp)
243+
}
244+
default:
245+
{
246+
fmt.Printf("client: invalid event type %v\n", reflect.TypeOf(event))
247+
fmt.Printf("client: task completed with error %s\n", ErrBadRequest.Error())
248+
return ErrorToTaskComplete(ErrBadRequest)
240249
}
241250
}
242-
243-
return errorToTaskComplete(ErrBadRequest)
244251
}
245252

246253
func ConvertToHttpRequest(ctx context.Context, apiReq ApiRequest) (*http.Request, error) {
@@ -277,15 +284,31 @@ func ConvertToHttpRequest(ctx context.Context, apiReq ApiRequest) (*http.Request
277284
return req, nil
278285
}
279286

280-
func errorToTaskComplete(err error) *TaskCompleteEvent {
281-
ret := ErrTaskExecError.Wrap(err)
282-
println(fmt.Sprintf("client: task completed with error, %v", ret))
283-
output := TaskOutput{IsAsync: false, IsNull: false, Error: &ret}
284-
return outputToTaskComplete(output)
287+
func ValueToTaskComplete(val any) TaskCompleteEvent {
288+
output := TaskOutput{
289+
Output: val,
290+
}
291+
return TaskCompleteEvent{
292+
Output: output,
293+
}
294+
}
295+
296+
func NilValueToTaskComplete() TaskCompleteEvent {
297+
output := TaskOutput{
298+
IsNull: true,
299+
}
300+
return TaskCompleteEvent{
301+
Output: output,
302+
}
285303
}
286304

287-
func outputToTaskComplete(output TaskOutput) *TaskCompleteEvent {
288-
return &TaskCompleteEvent{
305+
func ErrorToTaskComplete(err error) TaskCompleteEvent {
306+
ret := ErrTaskExecError.Wrap(err)
307+
output := TaskOutput{
308+
IsError: true,
309+
Error: ret,
310+
}
311+
return TaskCompleteEvent{
289312
Output: output,
290313
}
291314
}

polycode/service.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ func (r RemoteService) RequestReply(options TaskOptions, method string, input an
3636
return ThrowError(err)
3737
}
3838
println(fmt.Sprintf("exec task output %v", output))
39-
if output.Error != nil {
39+
if output.IsError {
4040
return ThrowError(output.Error)
4141
}
4242
return FutureFrom(output.Output)

0 commit comments

Comments
 (0)