@@ -31,7 +31,7 @@ pub(crate) trait IntoWorkflowCommand {
3131}
3232
3333/// Options for scheduling an activity
34- #[ derive( Debug , bon:: Builder ) ]
34+ #[ derive( Debug , bon:: Builder , Clone ) ]
3535#[ non_exhaustive]
3636#[ builder( start_fn = with_close_timeout, on( String , into) , state_mod( vis = "pub" ) ) ]
3737pub struct ActivityOptions {
@@ -75,14 +75,28 @@ pub struct ActivityOptions {
7575}
7676
7777impl ActivityOptions {
78+ /// Returns a builder with a [`ActivityCloseTimeouts::StartToClose`] set.
79+ pub fn with_start_to_close_timeout ( duration : Duration ) -> ActivityOptionsBuilder {
80+ Self :: with_close_timeout ( ActivityCloseTimeouts :: StartToClose ( duration) )
81+ }
82+
83+ /// Returns a builder with a [`ActivityCloseTimeouts::ScheduleToClose`] set.
84+ pub fn with_schedule_to_close_timeout ( duration : Duration ) -> ActivityOptionsBuilder {
85+ Self :: with_close_timeout ( ActivityCloseTimeouts :: ScheduleToClose ( duration) )
86+ }
87+
7888 /// Creates activity options with only `start_to_close_timeout` set.
89+ ///
90+ /// If you need additional fields set, use [`Self::with_start_to_close_timeout`].
7991 pub fn start_to_close_timeout ( duration : Duration ) -> Self {
80- Self :: with_close_timeout ( ActivityCloseTimeouts :: StartToClose ( duration) ) . build ( )
92+ Self :: with_start_to_close_timeout ( duration) . build ( )
8193 }
8294
8395 /// Creates activity options with only `schedule_to_close_timeout` set.
96+ ///
97+ /// If you need additional fields set, use [`Self::with_schedule_to_close_timeout`].
8498 pub fn schedule_to_close_timeout ( duration : Duration ) -> Self {
85- Self :: with_close_timeout ( ActivityCloseTimeouts :: ScheduleToClose ( duration) ) . build ( )
99+ Self :: with_schedule_to_close_timeout ( duration) . build ( )
86100 }
87101
88102 pub ( crate ) fn into_command (
@@ -569,53 +583,29 @@ mod tests {
569583 use temporalio_common:: protos:: coresdk:: workflow_commands:: workflow_command:: Variant ;
570584
571585 #[ test]
572- fn activity_options_builder_defaults_match_start_to_close_constructor ( ) {
573- let built = ActivityOptions :: with_close_timeout ( ActivityCloseTimeouts :: StartToClose (
574- Duration :: from_secs ( 5 ) ,
575- ) )
576- . build ( ) ;
577- let constructed = ActivityOptions :: start_to_close_timeout ( Duration :: from_secs ( 5 ) ) ;
578-
579- assert_eq ! ( built. close_timeout, constructed. close_timeout) ;
580- assert_eq ! ( built. activity_id, constructed. activity_id) ;
581- assert_eq ! ( built. task_queue, constructed. task_queue) ;
582- assert_eq ! (
583- built. schedule_to_start_timeout,
584- constructed. schedule_to_start_timeout
585- ) ;
586- assert_eq ! ( built. heartbeat_timeout, constructed. heartbeat_timeout) ;
587- assert_eq ! ( built. cancellation_type, constructed. cancellation_type) ;
588- assert_eq ! ( built. retry_policy, constructed. retry_policy) ;
589- assert_eq ! ( built. summary, constructed. summary) ;
590- assert_eq ! ( built. priority, constructed. priority) ;
591- assert_eq ! (
592- built. do_not_eagerly_execute,
593- constructed. do_not_eagerly_execute
594- ) ;
595- }
596-
597- #[ test]
598- fn activity_options_start_to_close_timeout_constructor_sets_only_that_timeout ( ) {
599- let opts = ActivityOptions :: start_to_close_timeout ( Duration :: from_secs ( 5 ) ) ;
586+ fn activity_options_with_start_to_close_timeout_wrapper_supports_builder_chaining ( ) {
587+ let opts = ActivityOptions :: with_start_to_close_timeout ( Duration :: from_secs ( 5 ) )
588+ . heartbeat_timeout ( Duration :: from_secs ( 2 ) )
589+ . build ( ) ;
600590
601591 assert_eq ! (
602592 opts. close_timeout,
603593 ActivityCloseTimeouts :: StartToClose ( Duration :: from_secs( 5 ) )
604594 ) ;
605- assert_eq ! ( opts. schedule_to_start_timeout, None ) ;
606- assert_eq ! ( opts. heartbeat_timeout, None ) ;
595+ assert_eq ! ( opts. heartbeat_timeout, Some ( Duration :: from_secs( 2 ) ) ) ;
607596 }
608597
609598 #[ test]
610- fn activity_options_schedule_to_close_timeout_constructor_sets_only_that_timeout ( ) {
611- let opts = ActivityOptions :: schedule_to_close_timeout ( Duration :: from_secs ( 5 ) ) ;
599+ fn activity_options_with_schedule_to_close_timeout_wrapper_supports_builder_chaining ( ) {
600+ let opts = ActivityOptions :: with_schedule_to_close_timeout ( Duration :: from_secs ( 5 ) )
601+ . heartbeat_timeout ( Duration :: from_secs ( 2 ) )
602+ . build ( ) ;
612603
613604 assert_eq ! (
614605 opts. close_timeout,
615606 ActivityCloseTimeouts :: ScheduleToClose ( Duration :: from_secs( 5 ) )
616607 ) ;
617- assert_eq ! ( opts. schedule_to_start_timeout, None ) ;
618- assert_eq ! ( opts. heartbeat_timeout, None ) ;
608+ assert_eq ! ( opts. heartbeat_timeout, Some ( Duration :: from_secs( 2 ) ) ) ;
619609 }
620610
621611 #[ test]
0 commit comments