diff --git a/temporal-kotlin/src/main/kotlin/io/temporal/activity/ActivityOptionsExt.kt b/temporal-kotlin/src/main/kotlin/io/temporal/activity/ActivityOptionsExt.kt index 30e3de2df9..91094906c9 100644 --- a/temporal-kotlin/src/main/kotlin/io/temporal/activity/ActivityOptionsExt.kt +++ b/temporal-kotlin/src/main/kotlin/io/temporal/activity/ActivityOptionsExt.kt @@ -28,7 +28,7 @@ inline fun ActivityOptions.copy( * @see ActivityOptions.Builder.setRetryOptions * @see ActivityOptions.getRetryOptions */ -inline fun ActivityOptions.Builder.setRetryOptions( +inline fun @TemporalDsl ActivityOptions.Builder.setRetryOptions( retryOptions: @TemporalDsl RetryOptions.Builder.() -> Unit ) { setRetryOptions(RetryOptions(retryOptions)) diff --git a/temporal-kotlin/src/main/kotlin/io/temporal/client/WorkflowOptionsExt.kt b/temporal-kotlin/src/main/kotlin/io/temporal/client/WorkflowOptionsExt.kt index 7560e798d7..e5cbb3ed5e 100644 --- a/temporal-kotlin/src/main/kotlin/io/temporal/client/WorkflowOptionsExt.kt +++ b/temporal-kotlin/src/main/kotlin/io/temporal/client/WorkflowOptionsExt.kt @@ -26,7 +26,7 @@ inline fun WorkflowOptions.copy( * @see WorkflowOptions.Builder.setRetryOptions * @see WorkflowOptions.getRetryOptions */ -inline fun WorkflowOptions.Builder.setRetryOptions( +inline fun @TemporalDsl WorkflowOptions.Builder.setRetryOptions( retryOptions: @TemporalDsl RetryOptions.Builder.() -> Unit ) { setRetryOptions(RetryOptions(retryOptions)) diff --git a/temporal-kotlin/src/main/kotlin/io/temporal/workflow/ChildWorkflowOptionsExt.kt b/temporal-kotlin/src/main/kotlin/io/temporal/workflow/ChildWorkflowOptionsExt.kt index 09473172c0..31aa20a955 100644 --- a/temporal-kotlin/src/main/kotlin/io/temporal/workflow/ChildWorkflowOptionsExt.kt +++ b/temporal-kotlin/src/main/kotlin/io/temporal/workflow/ChildWorkflowOptionsExt.kt @@ -26,7 +26,7 @@ inline fun ChildWorkflowOptions.copy( * @see ChildWorkflowOptions.Builder.setRetryOptions * @see ChildWorkflowOptions.getRetryOptions */ -inline fun ChildWorkflowOptions.Builder.setRetryOptions( +inline fun @TemporalDsl ChildWorkflowOptions.Builder.setRetryOptions( retryOptions: @TemporalDsl RetryOptions.Builder.() -> Unit ) { setRetryOptions(RetryOptions(retryOptions)) diff --git a/temporal-kotlin/src/test/kotlin/io/temporal/activity/ActivityOptionsExtTest.kt b/temporal-kotlin/src/test/kotlin/io/temporal/activity/ActivityOptionsExtTest.kt index 52210817c9..713405f304 100644 --- a/temporal-kotlin/src/test/kotlin/io/temporal/activity/ActivityOptionsExtTest.kt +++ b/temporal-kotlin/src/test/kotlin/io/temporal/activity/ActivityOptionsExtTest.kt @@ -37,6 +37,27 @@ class ActivityOptionsExtTest { assertEquals(builderActivityOptions, dslActivityOptions) } + @Test + fun `setRetryOptions DSL extension should work on ActivityOptions builder directly`() { + val builder = ActivityOptions.newBuilder().setTaskQueue("TestQueue") + builder.setRetryOptions { + setInitialInterval(Duration.ofMillis(50)) + setMaximumAttempts(5) + } + + val expected = ActivityOptions.newBuilder() + .setTaskQueue("TestQueue") + .setRetryOptions( + RetryOptions.newBuilder() + .setInitialInterval(Duration.ofMillis(50)) + .setMaximumAttempts(5) + .build() + ) + .build() + + assertEquals(expected, builder.build()) + } + @Test fun `ActivityOptions copy() DSL should merge override options`() { val sourceOptions = ActivityOptions { diff --git a/temporal-kotlin/src/test/kotlin/io/temporal/client/WorkflowOptionsExtTest.kt b/temporal-kotlin/src/test/kotlin/io/temporal/client/WorkflowOptionsExtTest.kt index 1dbc24d2db..2bdaf78015 100644 --- a/temporal-kotlin/src/test/kotlin/io/temporal/client/WorkflowOptionsExtTest.kt +++ b/temporal-kotlin/src/test/kotlin/io/temporal/client/WorkflowOptionsExtTest.kt @@ -38,6 +38,27 @@ class WorkflowOptionsExtTest { assertEquals(builderOptions, dslOptions) } + @Test + fun `setRetryOptions DSL extension should work on WorkflowOptions builder directly`() { + val builder = WorkflowOptions.newBuilder().setTaskQueue("TestQueue") + builder.setRetryOptions { + setInitialInterval(Duration.ofMillis(50)) + setMaximumAttempts(5) + } + + val expected = WorkflowOptions.newBuilder() + .setTaskQueue("TestQueue") + .setRetryOptions( + RetryOptions.newBuilder() + .setInitialInterval(Duration.ofMillis(50)) + .setMaximumAttempts(5) + .build() + ) + .build() + + assertEquals(expected, builder.build()) + } + @Test fun `WorkflowOptions copy() DSL should merge override options`() { val sourceOptions = WorkflowOptions { diff --git a/temporal-kotlin/src/test/kotlin/io/temporal/workflow/ChildWorkflowOptionsExtTest.kt b/temporal-kotlin/src/test/kotlin/io/temporal/workflow/ChildWorkflowOptionsExtTest.kt index 52070395f7..019fd8cc23 100644 --- a/temporal-kotlin/src/test/kotlin/io/temporal/workflow/ChildWorkflowOptionsExtTest.kt +++ b/temporal-kotlin/src/test/kotlin/io/temporal/workflow/ChildWorkflowOptionsExtTest.kt @@ -32,6 +32,27 @@ class ChildWorkflowOptionsExtTest { assertEquals(builderOptions, dslOptions) } + @Test + fun `setRetryOptions DSL extension should work on ChildWorkflowOptions builder directly`() { + val builder = ChildWorkflowOptions.newBuilder().setTaskQueue("TestQueue") + builder.setRetryOptions { + setInitialInterval(Duration.ofMillis(50)) + setMaximumAttempts(3) + } + + val expected = ChildWorkflowOptions.newBuilder() + .setTaskQueue("TestQueue") + .setRetryOptions( + RetryOptions.newBuilder() + .setInitialInterval(Duration.ofMillis(50)) + .setMaximumAttempts(3) + .build() + ) + .build() + + assertEquals(expected, builder.build()) + } + @Test fun `ChildWorkflowOptions copy() DSL should merge override options`() { val sourceOptions = ChildWorkflowOptions {