Skip to content

Improved StateMachine exceptions thrown with clear messages#59

Merged
DamianSuess merged 1 commit intodevelopfrom
feature/53-Improved-Exceptions
Dec 31, 2025
Merged

Improved StateMachine exceptions thrown with clear messages#59
DamianSuess merged 1 commit intodevelopfrom
feature/53-Improved-Exceptions

Conversation

@DamianSuess
Copy link
Copy Markdown
Contributor

@DamianSuess DamianSuess commented Dec 31, 2025

Details

Improved State Machine exceptions thrown with clear messages. Previously simply threw, InvalidOperationException with a custom message.

New Exception Types

/// <summary>State identifier is already registered exception.</summary>
public class DuplicateStateException(string message) : InvalidOperationException(message);

/// <summary>State transition not allowed by pre-defined rule.</summary>
/// <remarks>Happens when a custom-override provided is not in the allowed list.</remarks>
public class InvalidStateTransitionException(string message) : InvalidOperationException(message);

/// <summary>Top-level state is missing an initial state.</summary>
/// <param name="message">Message.</param>
public class MissingInitialStateException(string message) : InvalidOperationException(message);

/// <summary>Composite state is missing an initial child state.</summary>
/// <param name="message">Message.</param>
public class MissingInitialSubStateException(string message) : InvalidOperationException(message);

/// <summary>The child state was not registered the specified composite parent state.</summary>
/// <param name="message">Message.</param>
public class OrphanSubStateException(string message) : InvalidOperationException(message);

/// <summary>Substate's parent state must be registered as a composite state.</summary>
/// <param name="message">Message.</param>
public class ParentStateMustBeCompositeException(string message) : InvalidOperationException(message);

/// <summary>Thrown if the specified state identifier has not been registered.</summary>
/// <param name="message">Message.</param>
public class UnregisteredStateTransitionException(string message) : InvalidOperationException(message);

/// <summary>Substates do not share the same parent state.</summary>
/// <param name="message">Message.</param>
public class DisjointedNextSubStateException(string message) : InvalidOperationException(message);

@DamianSuess DamianSuess added this to the v2.0 milestone Dec 31, 2025
@DamianSuess DamianSuess self-assigned this Dec 31, 2025
@DamianSuess DamianSuess added the enhancement New feature or request label Dec 31, 2025
@DamianSuess DamianSuess linked an issue Dec 31, 2025 that may be closed by this pull request
@DamianSuess DamianSuess merged commit 4030346 into develop Dec 31, 2025
@DamianSuess DamianSuess deleted the feature/53-Improved-Exceptions branch December 31, 2025 15:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[v2.0] Improved Exception Handling

1 participant