@@ -27,7 +27,7 @@ pub(crate) trait IntoWorkflowCommand {
2727}
2828
2929/// Options for scheduling an activity
30- #[ derive( Debug , bon:: Builder ) ]
30+ #[ derive( Debug , bon:: Builder , Clone ) ]
3131#[ non_exhaustive]
3232#[ builder( start_fn = with_close_timeout, on( String , into) , state_mod( vis = "pub" ) ) ]
3333pub struct ActivityOptions {
@@ -71,14 +71,28 @@ pub struct ActivityOptions {
7171}
7272
7373impl ActivityOptions {
74+ /// Returns a builder with a [`ActivityCloseTimeouts::StartToClose`] set.
75+ pub fn with_start_to_close_timeout ( duration : Duration ) -> ActivityOptionsBuilder {
76+ Self :: with_close_timeout ( ActivityCloseTimeouts :: StartToClose ( duration) )
77+ }
78+
79+ /// Returns a builder with a [`ActivityCloseTimeouts::ScheduleToClose`] set.
80+ pub fn with_schedule_to_close_timeout ( duration : Duration ) -> ActivityOptionsBuilder {
81+ Self :: with_close_timeout ( ActivityCloseTimeouts :: ScheduleToClose ( duration) )
82+ }
83+
7484 /// Creates activity options with only `start_to_close_timeout` set.
85+ ///
86+ /// If you need additional fields set, use [`Self::with_start_to_close_timeout`].
7587 pub fn start_to_close_timeout ( duration : Duration ) -> Self {
76- Self :: with_close_timeout ( ActivityCloseTimeouts :: StartToClose ( duration) ) . build ( )
88+ Self :: with_start_to_close_timeout ( duration) . build ( )
7789 }
7890
7991 /// Creates activity options with only `schedule_to_close_timeout` set.
92+ ///
93+ /// If you need additional fields set, use [`Self::with_schedule_to_close_timeout`].
8094 pub fn schedule_to_close_timeout ( duration : Duration ) -> Self {
81- Self :: with_close_timeout ( ActivityCloseTimeouts :: ScheduleToClose ( duration) ) . build ( )
95+ Self :: with_schedule_to_close_timeout ( duration) . build ( )
8296 }
8397
8498 pub ( crate ) fn into_command (
@@ -547,53 +561,29 @@ mod tests {
547561 use temporalio_common:: protos:: coresdk:: workflow_commands:: workflow_command:: Variant ;
548562
549563 #[ test]
550- fn activity_options_builder_defaults_match_start_to_close_constructor ( ) {
551- let built = ActivityOptions :: with_close_timeout ( ActivityCloseTimeouts :: StartToClose (
552- Duration :: from_secs ( 5 ) ,
553- ) )
554- . build ( ) ;
555- let constructed = ActivityOptions :: start_to_close_timeout ( Duration :: from_secs ( 5 ) ) ;
556-
557- assert_eq ! ( built. close_timeout, constructed. close_timeout) ;
558- assert_eq ! ( built. activity_id, constructed. activity_id) ;
559- assert_eq ! ( built. task_queue, constructed. task_queue) ;
560- assert_eq ! (
561- built. schedule_to_start_timeout,
562- constructed. schedule_to_start_timeout
563- ) ;
564- assert_eq ! ( built. heartbeat_timeout, constructed. heartbeat_timeout) ;
565- assert_eq ! ( built. cancellation_type, constructed. cancellation_type) ;
566- assert_eq ! ( built. retry_policy, constructed. retry_policy) ;
567- assert_eq ! ( built. summary, constructed. summary) ;
568- assert_eq ! ( built. priority, constructed. priority) ;
569- assert_eq ! (
570- built. do_not_eagerly_execute,
571- constructed. do_not_eagerly_execute
572- ) ;
573- }
574-
575- #[ test]
576- fn activity_options_start_to_close_timeout_constructor_sets_only_that_timeout ( ) {
577- let opts = ActivityOptions :: start_to_close_timeout ( Duration :: from_secs ( 5 ) ) ;
564+ fn activity_options_with_start_to_close_timeout_wrapper_supports_builder_chaining ( ) {
565+ let opts = ActivityOptions :: with_start_to_close_timeout ( Duration :: from_secs ( 5 ) )
566+ . heartbeat_timeout ( Duration :: from_secs ( 2 ) )
567+ . build ( ) ;
578568
579569 assert_eq ! (
580570 opts. close_timeout,
581571 ActivityCloseTimeouts :: StartToClose ( Duration :: from_secs( 5 ) )
582572 ) ;
583- assert_eq ! ( opts. schedule_to_start_timeout, None ) ;
584- assert_eq ! ( opts. heartbeat_timeout, None ) ;
573+ assert_eq ! ( opts. heartbeat_timeout, Some ( Duration :: from_secs( 2 ) ) ) ;
585574 }
586575
587576 #[ test]
588- fn activity_options_schedule_to_close_timeout_constructor_sets_only_that_timeout ( ) {
589- let opts = ActivityOptions :: schedule_to_close_timeout ( Duration :: from_secs ( 5 ) ) ;
577+ fn activity_options_with_schedule_to_close_timeout_wrapper_supports_builder_chaining ( ) {
578+ let opts = ActivityOptions :: with_schedule_to_close_timeout ( Duration :: from_secs ( 5 ) )
579+ . heartbeat_timeout ( Duration :: from_secs ( 2 ) )
580+ . build ( ) ;
590581
591582 assert_eq ! (
592583 opts. close_timeout,
593584 ActivityCloseTimeouts :: ScheduleToClose ( Duration :: from_secs( 5 ) )
594585 ) ;
595- assert_eq ! ( opts. schedule_to_start_timeout, None ) ;
596- assert_eq ! ( opts. heartbeat_timeout, None ) ;
586+ assert_eq ! ( opts. heartbeat_timeout, Some ( Duration :: from_secs( 2 ) ) ) ;
597587 }
598588
599589 #[ test]
0 commit comments