Skip to content

Commit 8edb6dc

Browse files
committed
handle interface casting in package functions
1 parent ee90b42 commit 8edb6dc

File tree

2 files changed

+45
-10
lines changed

2 files changed

+45
-10
lines changed

dbos/client.go

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -240,10 +240,16 @@ func Enqueue[P any, R any](c Client, queueName, workflowName string, input P, op
240240
}
241241

242242
// Register the input and outputs for gob encoding
243+
var logger slog.Logger
244+
if cl, ok := c.(*client); ok {
245+
if ctx, ok := cl.dbosCtx.(*dbosContext); ok {
246+
logger = *ctx.logger
247+
}
248+
}
243249
var typedInput P
244-
safeGobRegister(typedInput, nil)
250+
safeGobRegister(typedInput, &logger)
245251
var typedOutput R
246-
safeGobRegister(typedOutput, nil)
252+
safeGobRegister(typedOutput, &logger)
247253

248254
// Call the interface method with the same signature
249255
handle, err := c.Enqueue(queueName, workflowName, input, opts...)

dbos/workflow.go

Lines changed: 37 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"context"
55
"errors"
66
"fmt"
7+
"log/slog"
78
"math"
89
"reflect"
910
"runtime"
@@ -436,10 +437,14 @@ func RegisterWorkflow[P any, R any](ctx DBOSContext, fn Workflow[P, R], opts ...
436437
fqn := runtime.FuncForPC(reflect.ValueOf(fn).Pointer()).Name()
437438

438439
// Registry the input/output types for gob encoding
440+
var logger slog.Logger
441+
if c, ok := ctx.(*dbosContext); ok {
442+
logger = *c.logger
443+
}
439444
var p P
440445
var r R
441-
safeGobRegister(p, ctx.(*dbosContext).logger)
442-
safeGobRegister(r, ctx.(*dbosContext).logger)
446+
safeGobRegister(p, &logger)
447+
safeGobRegister(r, &logger)
443448

444449
// Register a type-erased version of the durable workflow for recovery
445450
typedErasedWorkflow := WorkflowFunc(func(ctx DBOSContext, input any) (any, error) {
@@ -1040,8 +1045,12 @@ func RunAsStep[R any](ctx DBOSContext, fn Step[R], opts ...StepOption) (R, error
10401045
}
10411046

10421047
// Register the output type for gob encoding
1048+
var logger slog.Logger
1049+
if c, ok := ctx.(*dbosContext); ok {
1050+
logger = *c.logger
1051+
}
10431052
var r R
1044-
safeGobRegister(r, ctx.(*dbosContext).logger)
1053+
safeGobRegister(r, &logger)
10451054

10461055
// Append WithStepName option to ensure the step name is set. This will not erase a user-provided step name
10471056
stepName := runtime.FuncForPC(reflect.ValueOf(fn).Pointer()).Name()
@@ -1204,8 +1213,12 @@ func Send[P any](ctx DBOSContext, destinationID string, message P, topic string)
12041213
if ctx == nil {
12051214
return errors.New("ctx cannot be nil")
12061215
}
1216+
var logger slog.Logger
1217+
if c, ok := ctx.(*dbosContext); ok {
1218+
logger = *c.logger
1219+
}
12071220
var typedMessage P
1208-
safeGobRegister(typedMessage, ctx.(*dbosContext).logger)
1221+
safeGobRegister(typedMessage, &logger)
12091222
return ctx.Send(ctx, destinationID, message, topic)
12101223
}
12111224

@@ -1281,8 +1294,12 @@ func SetEvent[P any](ctx DBOSContext, key string, message P) error {
12811294
if ctx == nil {
12821295
return errors.New("ctx cannot be nil")
12831296
}
1297+
var logger slog.Logger
1298+
if c, ok := ctx.(*dbosContext); ok {
1299+
logger = *c.logger
1300+
}
12841301
var typedMessage P
1285-
safeGobRegister(typedMessage, ctx.(*dbosContext).logger)
1302+
safeGobRegister(typedMessage, &logger)
12861303
return ctx.SetEvent(ctx, key, message)
12871304
}
12881305

@@ -1475,8 +1492,12 @@ func RetrieveWorkflow[R any](ctx DBOSContext, workflowID string) (WorkflowHandle
14751492
}
14761493

14771494
// Register the output for gob encoding
1495+
var logger slog.Logger
1496+
if c, ok := ctx.(*dbosContext); ok {
1497+
logger = *c.logger
1498+
}
14781499
var r R
1479-
safeGobRegister(r, ctx.(*dbosContext).logger)
1500+
safeGobRegister(r, &logger)
14801501

14811502
// Call the interface method
14821503
handle, err := ctx.RetrieveWorkflow(ctx, workflowID)
@@ -1569,8 +1590,12 @@ func ResumeWorkflow[R any](ctx DBOSContext, workflowID string) (WorkflowHandle[R
15691590
}
15701591

15711592
// Register the output for gob encoding
1593+
var logger slog.Logger
1594+
if c, ok := ctx.(*dbosContext); ok {
1595+
logger = *c.logger
1596+
}
15721597
var r R
1573-
safeGobRegister(r, ctx.(*dbosContext).logger)
1598+
safeGobRegister(r, &logger)
15741599

15751600
_, err := ctx.ResumeWorkflow(ctx, workflowID)
15761601
if err != nil {
@@ -1661,8 +1686,12 @@ func ForkWorkflow[R any](ctx DBOSContext, input ForkWorkflowInput) (WorkflowHand
16611686
}
16621687

16631688
// Register the output for gob encoding
1689+
var logger slog.Logger
1690+
if c, ok := ctx.(*dbosContext); ok {
1691+
logger = *c.logger
1692+
}
16641693
var r R
1665-
safeGobRegister(r, ctx.(*dbosContext).logger)
1694+
safeGobRegister(r, &logger)
16661695

16671696
handle, err := ctx.ForkWorkflow(ctx, input)
16681697
if err != nil {

0 commit comments

Comments
 (0)