pub struct ParallelStateMachine<S, E, C>{
pub(crate) regions: Vec<StateMachine<S, E, C>>,
}Fields§
§regions: Vec<StateMachine<S, E, C>>Implementations§
Source§impl<S, E, C> ParallelStateMachine<S, E, C>
impl<S, E, C> ParallelStateMachine<S, E, C>
Sourcepub fn new() -> Self
pub fn new() -> Self
Examples found in repository?
examples/order_example.rs (line 448)
418fn parallel_example() {
419 println!("\n=== Parallel Regions Example ===");
420
421 // Order processing region
422 let mut order_builder =
423 StateMachineBuilderFactory::create::<OrderState, OrderEvent, OrderContext>();
424 order_builder
425 .external_transition()
426 .from(OrderState::New)
427 .to(OrderState::Processing)
428 .on(OrderEvent::Process)
429 .perform(|_s, _e, ctx| {
430 println!("Order region: Processing order {}", ctx.order_id);
431 });
432
433 // Payment processing region (using same states/events for simplicity)
434 let mut payment_builder =
435 StateMachineBuilderFactory::create::<OrderState, OrderEvent, OrderContext>();
436 payment_builder
437 .external_transition()
438 .from(OrderState::PaymentPending)
439 .to(OrderState::PaymentReceived)
440 .on(OrderEvent::ConfirmPayment)
441 .perform(|_s, _e, ctx| {
442 println!(
443 "Payment region: Payment confirmed for order {}",
444 ctx.order_id
445 );
446 });
447
448 let mut parallel_machine = ParallelStateMachine::new();
449 parallel_machine.add_region(order_builder.id("OrderRegion").build());
450 parallel_machine.add_region(payment_builder.id("PaymentRegion").build());
451
452 let context = OrderContext {
453 order_id: "ORD-PARALLEL".to_string(),
454 amount: 199.99,
455 customer_id: "CUST-P1".to_string(),
456 };
457
458 // Fire events in parallel regions
459 println!("Firing Process event in parallel regions:");
460 let results = parallel_machine.fire_event(
461 vec![OrderState::New, OrderState::PaymentPending],
462 OrderEvent::Process,
463 context.clone(),
464 );
465
466 for (i, result) in results.iter().enumerate() {
467 println!(" Region {}: {:?}", i, result);
468 }
469
470 println!("Firing ConfirmPayment event in parallel regions:");
471 let results = parallel_machine.fire_event(
472 vec![OrderState::Processing, OrderState::PaymentPending],
473 OrderEvent::ConfirmPayment,
474 context,
475 );
476
477 for (i, result) in results.iter().enumerate() {
478 println!(" Region {}: {:?}", i, result);
479 }
480}Sourcepub fn add_region(&mut self, machine: StateMachine<S, E, C>)
pub fn add_region(&mut self, machine: StateMachine<S, E, C>)
Examples found in repository?
examples/order_example.rs (line 449)
418fn parallel_example() {
419 println!("\n=== Parallel Regions Example ===");
420
421 // Order processing region
422 let mut order_builder =
423 StateMachineBuilderFactory::create::<OrderState, OrderEvent, OrderContext>();
424 order_builder
425 .external_transition()
426 .from(OrderState::New)
427 .to(OrderState::Processing)
428 .on(OrderEvent::Process)
429 .perform(|_s, _e, ctx| {
430 println!("Order region: Processing order {}", ctx.order_id);
431 });
432
433 // Payment processing region (using same states/events for simplicity)
434 let mut payment_builder =
435 StateMachineBuilderFactory::create::<OrderState, OrderEvent, OrderContext>();
436 payment_builder
437 .external_transition()
438 .from(OrderState::PaymentPending)
439 .to(OrderState::PaymentReceived)
440 .on(OrderEvent::ConfirmPayment)
441 .perform(|_s, _e, ctx| {
442 println!(
443 "Payment region: Payment confirmed for order {}",
444 ctx.order_id
445 );
446 });
447
448 let mut parallel_machine = ParallelStateMachine::new();
449 parallel_machine.add_region(order_builder.id("OrderRegion").build());
450 parallel_machine.add_region(payment_builder.id("PaymentRegion").build());
451
452 let context = OrderContext {
453 order_id: "ORD-PARALLEL".to_string(),
454 amount: 199.99,
455 customer_id: "CUST-P1".to_string(),
456 };
457
458 // Fire events in parallel regions
459 println!("Firing Process event in parallel regions:");
460 let results = parallel_machine.fire_event(
461 vec![OrderState::New, OrderState::PaymentPending],
462 OrderEvent::Process,
463 context.clone(),
464 );
465
466 for (i, result) in results.iter().enumerate() {
467 println!(" Region {}: {:?}", i, result);
468 }
469
470 println!("Firing ConfirmPayment event in parallel regions:");
471 let results = parallel_machine.fire_event(
472 vec![OrderState::Processing, OrderState::PaymentPending],
473 OrderEvent::ConfirmPayment,
474 context,
475 );
476
477 for (i, result) in results.iter().enumerate() {
478 println!(" Region {}: {:?}", i, result);
479 }
480}Sourcepub fn fire_event(
&self,
states: Vec<S>,
event: E,
context: C,
) -> Vec<Result<S, TransitionError>>
pub fn fire_event( &self, states: Vec<S>, event: E, context: C, ) -> Vec<Result<S, TransitionError>>
Examples found in repository?
examples/order_example.rs (lines 460-464)
418fn parallel_example() {
419 println!("\n=== Parallel Regions Example ===");
420
421 // Order processing region
422 let mut order_builder =
423 StateMachineBuilderFactory::create::<OrderState, OrderEvent, OrderContext>();
424 order_builder
425 .external_transition()
426 .from(OrderState::New)
427 .to(OrderState::Processing)
428 .on(OrderEvent::Process)
429 .perform(|_s, _e, ctx| {
430 println!("Order region: Processing order {}", ctx.order_id);
431 });
432
433 // Payment processing region (using same states/events for simplicity)
434 let mut payment_builder =
435 StateMachineBuilderFactory::create::<OrderState, OrderEvent, OrderContext>();
436 payment_builder
437 .external_transition()
438 .from(OrderState::PaymentPending)
439 .to(OrderState::PaymentReceived)
440 .on(OrderEvent::ConfirmPayment)
441 .perform(|_s, _e, ctx| {
442 println!(
443 "Payment region: Payment confirmed for order {}",
444 ctx.order_id
445 );
446 });
447
448 let mut parallel_machine = ParallelStateMachine::new();
449 parallel_machine.add_region(order_builder.id("OrderRegion").build());
450 parallel_machine.add_region(payment_builder.id("PaymentRegion").build());
451
452 let context = OrderContext {
453 order_id: "ORD-PARALLEL".to_string(),
454 amount: 199.99,
455 customer_id: "CUST-P1".to_string(),
456 };
457
458 // Fire events in parallel regions
459 println!("Firing Process event in parallel regions:");
460 let results = parallel_machine.fire_event(
461 vec![OrderState::New, OrderState::PaymentPending],
462 OrderEvent::Process,
463 context.clone(),
464 );
465
466 for (i, result) in results.iter().enumerate() {
467 println!(" Region {}: {:?}", i, result);
468 }
469
470 println!("Firing ConfirmPayment event in parallel regions:");
471 let results = parallel_machine.fire_event(
472 vec![OrderState::Processing, OrderState::PaymentPending],
473 OrderEvent::ConfirmPayment,
474 context,
475 );
476
477 for (i, result) in results.iter().enumerate() {
478 println!(" Region {}: {:?}", i, result);
479 }
480}